From c852bf344c60a4a45b0c7381de09ef64def84d8d Mon Sep 17 00:00:00 2001 From: Xhuis Date: Fri, 10 Jul 2015 21:58:30 -0400 Subject: [PATCH 01/65] Firelock (de)construction --- code/game/machinery/doors/firedoor.dm | 130 +++++++++++++++++++++++++- 1 file changed, 128 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 85f6dac25e8..d7d20beefa5 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -1,3 +1,9 @@ +#define CONSTRUCTION_COMPLETE 0 //No construction done - functioning as normal +#define CONSTRUCTION_PANEL_OPEN 1 //Maintenance panel is open, still functioning +#define CONSTRUCTION_WIRES_EXPOSED 2 //Cover plate is removed, wires are available +#define CONSTRUCTION_GUTTED 3 //Wires are removed, circuit ready to remove +#define CONSTRUCTION_NOCIRCUIT 4 //Circuit board removed, can safely weld apart + /var/const/OPEN = 1 /var/const/CLOSED = 2 @@ -14,6 +20,9 @@ var/nextstate = null sub_door = 1 closingLayer = 3.11 + var/constructing = 0 + var/panelOpen = 0 + var/constructionStep = CONSTRUCTION_COMPLETE /obj/machinery/door/firedoor/Bumped(atom/AM) if(p_open || operating) return @@ -33,7 +42,102 @@ /obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob, params) add_fingerprint(user) if(operating) return//Already doing something. - if(istype(C, /obj/item/weapon/weldingtool)) + + if(constructing) //Construction steps + if(!panelOpen) + return + switch(constructionStep) + if(CONSTRUCTION_PANEL_OPEN) + if(istype(C, /obj/item/weapon/crowbar)) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + user.visible_message("[user] starts prying something out from [src]...", \ + "You begin prying out the wire cover...") + if(!do_after(user, 50)) return + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ + "You remove the cover plate from [src], exposing the wires.") + constructionStep = CONSTRUCTION_WIRES_EXPOSED + return + if(CONSTRUCTION_WIRES_EXPOSED) + if(istype(C, /obj/item/weapon/wirecutters)) + playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) + user.visible_message("[user] starts cutting the wires from [src]...", \ + "You begin removing [src]'s wires...") + if(!do_after(user, 60)) return + user.visible_message("[user] removes the wires from [src].", \ + "You remove the wiring from [src], exposing the circuit board.") + var/obj/item/stack/cable_coil/B = new(get_turf(user)) + B.amount = 5 + constructionStep = CONSTRUCTION_GUTTED + return + if(istype(C, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(1, user)) + playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + user.visible_message("[user] starts welding a metal plate into [src]...", \ + "You begin welding the cover plate back onto [src]...") + if(!do_after(user, 80)) return + playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + user.visible_message("[user] welds the metal plate into [src].", \ + "You weld [src]'s cover plate into place, hiding the wires.") + constructionStep = CONSTRUCTION_PANEL_OPEN + return + if(CONSTRUCTION_GUTTED) + if(istype(C, /obj/item/weapon/crowbar)) + user.visible_message("[user] begins removing the circuit board from [src]...", \ + "You begin prying out the circuit board from [src]...") + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + if(!do_after(user, 50)) return + user.visible_message("[user] removes [src]'s circuit board.", \ + "You remove the circuit board from [src].") + new /obj/item/weapon/firelock_board(get_turf(user)) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + constructionStep = CONSTRUCTION_NOCIRCUIT + return + if(istype(C, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/B = C + if(B.amount < 5) + user << "You need more wires to add wiring to [src]." + return + user.visible_message("[user] begins wiring [src]...", \ + "You begin adding wires to [src]...") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(!do_after(user, 60)) return + user.visible_message("[user] adds wires to [src].", \ + "You wire [src].") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + B.use(5) + constructionStep = CONSTRUCTION_WIRES_EXPOSED + return + if(CONSTRUCTION_NOCIRCUIT) + if(istype(C, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = C + if(!W.remove_fuel(1,user)) + playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + user.visible_message("[user] begins cutting apart [src]'s frame.", \ + "You begin slicing apart [src].") + if(!do_after(user, 80)) return + user.visible_message("[user] cuts apart [src]!", \ + "You cut apart [src] into metal.") + playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + var/obj/item/stack/sheet/metal/M = new(get_turf(user)) + M.amount = 7 + return + if(istype(C, /obj/item/weapon/firelock_board)) + user.visible_message("[user] starts adding [C] to [src]...", \ + "You begin adding a circuit board to [src]...") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(!do_after(user, 40)) return + user.drop_item() + qdel(C) + user.visible_message("[user] adds a circuit to [src].", \ + "You insert and secure [C].") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + constructionStep = CONSTRUCTION_GUTTED + return + + + if(istype(C, /obj/item/weapon/weldingtool) && !constructing) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0, user)) blocked = !blocked @@ -49,6 +153,22 @@ else //close it up again //fucking 10/10 commenting here einstein close() return + + if(istype(C, /obj/item/weapon/screwdriver)) + panelOpen = !panelOpen + if(panelOpen) + user.visible_message("[user] opens [src]'s maintenance panel.", \ + "You unscrew [src]'s maintenance panel.") + constructing = 1 + constructionStep = CONSTRUCTION_PANEL_OPEN + else + user.visible_message("[user] closes [src]'s maintenance panel.", \ + "You close [src]'s maintenance panel.") + constructing = 0 + constructionStep = CONSTRUCTION_COMPLETE + playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + return + return /obj/machinery/door/firedoor/attack_ai(mob/user as mob) @@ -84,6 +204,7 @@ /obj/machinery/door/firedoor/open() ..() + if(constructing) return latetoggle() return @@ -140,4 +261,9 @@ icon = 'icons/obj/doors/Doorfire.dmi' glass = 0 - +/obj/item/weapon/firelock_board + name = "firelock electronics" + desc = "A circuit board used in construction of firelocks." + icon = 'icons/obj/module.dmi' + icon_state = "airalarm_electronics" + w_class = 2 From 2c75d66ac35778630fc6c6664335e22c46126fd0 Mon Sep 17 00:00:00 2001 From: Miauw Date: Sat, 11 Jul 2015 17:14:02 +0200 Subject: [PATCH 02/65] Buffs syndicate bombs to fit the new explosion mechanics. --- code/game/machinery/syndicatebomb.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 87b89bcd926..48e3b972f17 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -188,7 +188,7 @@ if(adminlog) message_admins(adminlog) log_game(adminlog) - explosion(get_turf(src),2,5,11, flame_range = 11) + explosion(get_turf(src),3,9,17, flame_range = 11) if(src.loc && istype(src.loc,/obj/machinery/syndicatebomb/)) qdel(src.loc) qdel(src) From 262626ce4c44a8e2cf03594413293495c753341a Mon Sep 17 00:00:00 2001 From: Miauw Date: Sat, 11 Jul 2015 17:16:11 +0200 Subject: [PATCH 03/65] Fixes syndiebomb flame range. --- code/game/machinery/syndicatebomb.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 48e3b972f17..7a55deca4ed 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -188,7 +188,7 @@ if(adminlog) message_admins(adminlog) log_game(adminlog) - explosion(get_turf(src),3,9,17, flame_range = 11) + explosion(get_turf(src),3,9,17, flame_range = 17) if(src.loc && istype(src.loc,/obj/machinery/syndicatebomb/)) qdel(src.loc) qdel(src) From d2e618a28db62a3de54ee9521423613399521fa8 Mon Sep 17 00:00:00 2001 From: Miauw Date: Sat, 11 Jul 2015 17:22:00 +0200 Subject: [PATCH 04/65] Makes syndiebomb beeping louder to compensate for 3d sound. --- code/game/machinery/syndicatebomb.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 7a55deca4ed..2c66418f4db 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -19,7 +19,7 @@ /obj/machinery/syndicatebomb/process() if(active && !defused && (timer > 0)) //Tick Tock - var/volume = (timer <= 10 ? 30 : 5) // Tick louder when the bomb is closer to being detonated. + var/volume = (timer <= 10 ? 40 : 10) // Tick louder when the bomb is closer to being detonated. playsound(loc, beepsound, volume, 0) timer-- if(active && !defused && (timer <= 0)) //Boom From f40b4381d4a83a06cceb76fafb5bc40d1b75334e Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sat, 11 Jul 2015 11:25:14 -0400 Subject: [PATCH 05/65] Separates construction into the door and a frame --- code/game/machinery/doors/firedoor.dm | 261 +++++++++++------- .../items/stacks/sheets/sheet_types.dm | 1 + icons/obj/doors/Doorfire.dmi | Bin 7008 -> 7717 bytes 3 files changed, 158 insertions(+), 104 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d7d20beefa5..bee062feba7 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -20,9 +20,7 @@ var/nextstate = null sub_door = 1 closingLayer = 3.11 - var/constructing = 0 var/panelOpen = 0 - var/constructionStep = CONSTRUCTION_COMPLETE /obj/machinery/door/firedoor/Bumped(atom/AM) if(p_open || operating) return @@ -43,101 +41,7 @@ add_fingerprint(user) if(operating) return//Already doing something. - if(constructing) //Construction steps - if(!panelOpen) - return - switch(constructionStep) - if(CONSTRUCTION_PANEL_OPEN) - if(istype(C, /obj/item/weapon/crowbar)) - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - user.visible_message("[user] starts prying something out from [src]...", \ - "You begin prying out the wire cover...") - if(!do_after(user, 50)) return - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ - "You remove the cover plate from [src], exposing the wires.") - constructionStep = CONSTRUCTION_WIRES_EXPOSED - return - if(CONSTRUCTION_WIRES_EXPOSED) - if(istype(C, /obj/item/weapon/wirecutters)) - playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) - user.visible_message("[user] starts cutting the wires from [src]...", \ - "You begin removing [src]'s wires...") - if(!do_after(user, 60)) return - user.visible_message("[user] removes the wires from [src].", \ - "You remove the wiring from [src], exposing the circuit board.") - var/obj/item/stack/cable_coil/B = new(get_turf(user)) - B.amount = 5 - constructionStep = CONSTRUCTION_GUTTED - return - if(istype(C, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = C - if(W.remove_fuel(1, user)) - playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) - user.visible_message("[user] starts welding a metal plate into [src]...", \ - "You begin welding the cover plate back onto [src]...") - if(!do_after(user, 80)) return - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) - user.visible_message("[user] welds the metal plate into [src].", \ - "You weld [src]'s cover plate into place, hiding the wires.") - constructionStep = CONSTRUCTION_PANEL_OPEN - return - if(CONSTRUCTION_GUTTED) - if(istype(C, /obj/item/weapon/crowbar)) - user.visible_message("[user] begins removing the circuit board from [src]...", \ - "You begin prying out the circuit board from [src]...") - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(!do_after(user, 50)) return - user.visible_message("[user] removes [src]'s circuit board.", \ - "You remove the circuit board from [src].") - new /obj/item/weapon/firelock_board(get_turf(user)) - playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - constructionStep = CONSTRUCTION_NOCIRCUIT - return - if(istype(C, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/B = C - if(B.amount < 5) - user << "You need more wires to add wiring to [src]." - return - user.visible_message("[user] begins wiring [src]...", \ - "You begin adding wires to [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 60)) return - user.visible_message("[user] adds wires to [src].", \ - "You wire [src].") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - B.use(5) - constructionStep = CONSTRUCTION_WIRES_EXPOSED - return - if(CONSTRUCTION_NOCIRCUIT) - if(istype(C, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = C - if(!W.remove_fuel(1,user)) - playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) - user.visible_message("[user] begins cutting apart [src]'s frame.", \ - "You begin slicing apart [src].") - if(!do_after(user, 80)) return - user.visible_message("[user] cuts apart [src]!", \ - "You cut apart [src] into metal.") - playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) - var/obj/item/stack/sheet/metal/M = new(get_turf(user)) - M.amount = 7 - return - if(istype(C, /obj/item/weapon/firelock_board)) - user.visible_message("[user] starts adding [C] to [src]...", \ - "You begin adding a circuit board to [src]...") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 40)) return - user.drop_item() - qdel(C) - user.visible_message("[user] adds a circuit to [src].", \ - "You insert and secure [C].") - playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - constructionStep = CONSTRUCTION_GUTTED - return - - - if(istype(C, /obj/item/weapon/weldingtool) && !constructing) + if(istype(C, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/W = C if(W.remove_fuel(0, user)) blocked = !blocked @@ -145,6 +49,22 @@ update_icon() return + if(istype(C, /obj/item/weapon/wrench) && panelOpen) + playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message("[user] starts undoing [src]'s bolts...", \ + "You start unfastening [src]'s floor bolts...") + if(!do_after(user, 50)) return + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] unfastens [src]'s bolts.", \ + "You undo [src]'s floor bolts.") + var/obj/structure/firelock_frame/F = new(get_turf(src)) + if(istype(src, /obj/machinery/door/firedoor/heavy)) + F.reinforced = 1 + F.constructionStep = CONSTRUCTION_PANEL_OPEN + F.update_icon() + qdel(src) + return + if(istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/twohanded/fireaxe) && C:wielded == 1)) if(blocked || operating) return if(density) @@ -159,13 +79,9 @@ if(panelOpen) user.visible_message("[user] opens [src]'s maintenance panel.", \ "You unscrew [src]'s maintenance panel.") - constructing = 1 - constructionStep = CONSTRUCTION_PANEL_OPEN else user.visible_message("[user] closes [src]'s maintenance panel.", \ "You close [src]'s maintenance panel.") - constructing = 0 - constructionStep = CONSTRUCTION_COMPLETE playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) return @@ -204,7 +120,6 @@ /obj/machinery/door/firedoor/open() ..() - if(constructing) return latetoggle() return @@ -262,8 +177,146 @@ glass = 0 /obj/item/weapon/firelock_board - name = "firelock electronics" + name = "firelock circuitry" desc = "A circuit board used in construction of firelocks." icon = 'icons/obj/module.dmi' - icon_state = "airalarm_electronics" + icon_state = "mainboard" w_class = 2 + +/obj/structure/firelock_frame + name = "firelock frame" + desc = "A partially completed firelock." + icon = 'icons/obj/doors/Doorfire.dmi' + icon_state = "frame1" + anchored = 0 + density = 1 + var/constructionStep = CONSTRUCTION_NOCIRCUIT + var/reinforced = 0 + +/obj/structure/firelock_frame/examine(mob/user) + ..() + switch(constructionStep) + if(CONSTRUCTION_PANEL_OPEN) + user << "There is a small metal plate covering the wires." + if(CONSTRUCTION_WIRES_EXPOSED) + user << "Wires are trailing from the maintenance panel." + if(CONSTRUCTION_GUTTED) + user << "The circuit board is visible." + if(CONSTRUCTION_NOCIRCUIT) + user << "There are no electronics in the frame." + +/obj/structure/firelock_frame/update_icon() + ..() + icon_state = "frame[constructionStep]" + +/obj/structure/firelock_frame/attackby(obj/item/weapon/C, mob/user) + switch(constructionStep) + if(CONSTRUCTION_PANEL_OPEN) + if(istype(C, /obj/item/weapon/crowbar)) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + user.visible_message("[user] starts prying something out from [src]...", \ + "You begin prying out the wire cover...") + if(!do_after(user, 50)) return + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ + "You remove the cover plate from [src], exposing the wires.") + constructionStep = CONSTRUCTION_WIRES_EXPOSED + update_icon() + return + if(istype(C, /obj/item/weapon/wrench)) + playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) + user.visible_message("[user] starts bolting down [src]...", \ + "You begin bolting [src]...") + if(!do_after(user, 30)) return + user.visible_message("[user] finishes the firelock.", \ + "You finish the firelock.") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(reinforced) + new /obj/machinery/door/firedoor/heavy(get_turf(src)) + else + new /obj/machinery/door/firedoor(get_turf(src)) + qdel(src) + return + if(CONSTRUCTION_WIRES_EXPOSED) + if(istype(C, /obj/item/weapon/wirecutters)) + playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) + user.visible_message("[user] starts cutting the wires from [src]...", \ + "You begin removing [src]'s wires...") + if(!do_after(user, 60)) return + user.visible_message("[user] removes the wires from [src].", \ + "You remove the wiring from [src], exposing the circuit board.") + var/obj/item/stack/cable_coil/B = new(get_turf(src)) + B.amount = 5 + constructionStep = CONSTRUCTION_GUTTED + update_icon() + return + if(istype(C, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(1, user)) + playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + user.visible_message("[user] starts welding a metal plate into [src]...", \ + "You begin welding the cover plate back onto [src]...") + if(!do_after(user, 80)) return + playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + user.visible_message("[user] welds the metal plate into [src].", \ + "You weld [src]'s cover plate into place, hiding the wires.") + constructionStep = CONSTRUCTION_PANEL_OPEN + update_icon() + return + if(CONSTRUCTION_GUTTED) + if(istype(C, /obj/item/weapon/crowbar)) + user.visible_message("[user] begins removing the circuit board from [src]...", \ + "You begin prying out the circuit board from [src]...") + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + if(!do_after(user, 50)) return + user.visible_message("[user] removes [src]'s circuit board.", \ + "You remove the circuit board from [src].") + new /obj/item/weapon/firelock_board(get_turf(src)) + playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) + constructionStep = CONSTRUCTION_NOCIRCUIT + update_icon() + return + if(istype(C, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/B = C + if(B.amount < 5) + user << "You need more wires to add wiring to [src]." + return + user.visible_message("[user] begins wiring [src]...", \ + "You begin adding wires to [src]...") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(!do_after(user, 60)) return + user.visible_message("[user] adds wires to [src].", \ + "You wire [src].") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + B.use(5) + constructionStep = CONSTRUCTION_WIRES_EXPOSED + update_icon() + return + if(CONSTRUCTION_NOCIRCUIT) + if(istype(C, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = C + if(W.remove_fuel(1,user)) + playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) + user.visible_message("[user] begins cutting apart [src]'s frame...", \ + "You begin slicing [src] apart...") + if(!do_after(user, 80)) return + user.visible_message("[user] cuts apart [src]!", \ + "You cut [src] into metal.") + playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) + var/obj/item/stack/sheet/metal/M = new(get_turf(src)) + M.amount = 3 + qdel(src) + return + if(istype(C, /obj/item/weapon/firelock_board)) + user.visible_message("[user] starts adding [C] to [src]...", \ + "You begin adding a circuit board to [src]...") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + if(!do_after(user, 40)) return + user.drop_item() + qdel(C) + user.visible_message("[user] adds a circuit to [src].", \ + "You insert and secure [C].") + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + constructionStep = CONSTRUCTION_GUTTED + update_icon() + return diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 13b9ad4be67..7d780f9bdd1 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -28,6 +28,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \ null, \ diff --git a/icons/obj/doors/Doorfire.dmi b/icons/obj/doors/Doorfire.dmi index 8c3644c22f4a7d778bf6c2d375a78a2f1039c506..3b9f05cfa32116b59b224b7e8f243728647e922c 100644 GIT binary patch literal 7717 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 literal 7008 zcmZ{JXIv9c)b55Lp-NS%1O-Hj0s#dI=6Oax9f^<;OK!Q?5iu4|&h=3HONKq3- zq!+2ud+(tokn+a=d++^rKkUx#Z_ezQIp@st%sCr#@2(CDBOfCG04#dCn#R;NpL(I_ z>8STNPLBN4=G${qivZ0>{!V_6eF7ePdjUXDPDSDm#+RyWk$uWWva4p7t~YIortIcd zvCZFYtletgPQo8u2ro#)vH53)dBa`EJgiHf+^auGHYD$7UDcoTtQXR*P*334XVx@2 z8Hftrea8~cA>6uoH`l>Pg63WA{uS9XzE8K}mdUx-Cv8SQ-%1=l`pmqeb_KQ-&QY^y zDa5>AJ!|Y-^5{O9qgXEsaqVd&2@^jXw%IqT19R6>mpd}!bsFQc7&>Q?Az1yXR)!1ce-Ui|Iy@hWKJ!o zpT1CPQ0B)N^kbF5T{S5-_y>pIWm)t1@+%fPy-M-4`YlU)05%GKaPi>q(Bbf< zZA0nGb8dSwk)Zhe;6vHhb-PTmsjI8l{Vau{dy1ctX_Cva-q2rrWC2?^=3X6}8Kv{E z#Jtj4uXY()SrPaMWXlh2o1cKlQmhy^p4r9{_E*5D%6&76l{0-1CKYG4$VKVuYrKCyB&}4#MmeRXrA|Nv?kaNR0avCrCmR8 zty}K0y3}y%X2s#U1@%d>7Mg+FdSUS`pSy3VCS=%d2i@WF>7@T6HG?9uQEYmXs#r*xtal>aVL-Nuv@Rts@I z=B&Bx)0CBC_QCFO^wdMHzbxGr=Gi3yu2^4_?H+$h*57*FwzSFZ1m@Fgihde zVux?ng_Twa>Q@_;mw6I}BWp*=i{Z*BsAFE;@;^T3Z@mOi&fe1a;QhrL#$z9w64vA| z8==iftiarFZC}gN6SiLTs;;NUqb8S0K`>7YNcBEo2%^znp%8m~!!6Epi9T0+3neKe z!#?D=CH!Q`t-gB81(5R97T=H~6 zylZpXpvnRMDrcEZnoxrZ(sop!OI-Xdc!gj$CCeD;PG=DFL-#%q&7-T%PPV%>1b$6p z8{Njv7_Al**!H26l4-#)8s=X|adp%)po}!p1IMt$Tx4yd;5)c1eI_lN0o|Qb_ac-_ zTk5L>8si@3-d~qZ(OpiP8kiwyj{Y}@MDaIfpVf5cE0<79F#3K~6wPI$1Da$#l*F3_ zfm0Lgka7qhT7NDdl-7m1^s-dNQP4R*BbZX$XWgTEgZ$zs53*JOVr7U5vfyu>cWf1$@Nnyb)4>Bap@+DDmxUSv5iSD`_wh8eT{ zFE|xV?Gj>Q7&Hs#t=h`aoubA zWdD+PsLgmao9}mhtUohprS9x(WH0^r3wQl#3e}ul27`(SN17dLH@QQ*gHO+gD3Kug z*PW_X;;-xvehW+^0*3}DzgoNScuXkU7A8m2O;^=JI?BTMmV{;yor;nl8W?!-^e0o(xsue+-K!yyY!e{w z2M@T9wx`M^lzmoYzaF>)QeYqX#AO)$Tfhy}&f$ASSKuVdqMi*UkM-g8k;lSR(|TvI zxox|9Xq#eOg4d3UXZL^m)n@S#x=+mxovUSg9?2j$oFKEAnGNi~qk zkxpIvT==+D;jm{##dAAx@YXg2>Ufoe9@~>#Z}u=x1Oe?dy1?}g^?G?G_*zZLc7ukX zwe9kmy^q;vc4>CIY7m43snq?JU{Wi1a+dcN`$0Ab+(=gmb&~NmSqE&rBu$UGiIu< zu>#&x9GWkzx>c`!6L19i@?N?Hww7UiNu9(i`4R54^m&GB*4cfkUueUod=@F#qmWkX z3L5(h`AI2cT;=%CD z5;b>m60df)grWdM(zsm%7t#1J1}viO&d8^;PvoN{RWg2f_cDXH;>NW@Zr`8)?SiZ@ zHf5%Ew{<^gOL%9yim;`*U!C z3a+NhT<2}YF9DY?E7E5Iv@}EExdekzjx|6{BuU%TknT?!?FWCyn}bhTfWxuBbrx?- z6hT-x_~sVoK3xIM7SpC>f>e-8+rEdf((LM8xXgS?v**o;u3_v7F{xd)eA@}93LUMO3Qn>HwfZ6$G&&pYZa>kDK zGPJV@K>91oUNGyh(IuS8ekfDD%-jv@4>+mnQDwUEWj41h%9mN^4r%Iq$BWchi~x!| zDsoZ!>Rj+pggTDmWMcAxDFPb>ZjdiCoIYd2*E74_`;=Hp;aFF{*f{++<@qb|Zz6FC zvB)zt0lN;>)@&UDGS^!jGqThTWx^A|l;PYh#c3o1%N*N#V-q(o`>;EV0xa|*#W-UL z<&0xUwUB^z+l%>38Fehr>m6j8qik<6K<5|w_UjvBuI^tysH{W@X0NEQ`=$vcQ-4hq zGV4>|BTihmtiu)a0JDw6R?CgTD}b+X?Z|NH`kp{kmduZdR|`tgdWGDeyY#c04;|#| zhU^h9)n&MWR!|L%04)vu;BJX{{p+96_Vw~ywAi>7|hcs?dA0h`;~zhT*(yy^nEOXH=@%?}^cJI<(o^j3^{131$P zrJrpdB^RZeARk=_i}rjJE)OFZC`le&rOlsa;Fu|3^E{KtS%vwtCQo}e&tXb}*6@NS4l5(-13qw_4 zID6#5lBCB#(18gUKlh+}$1252g{Th|B$>|Ttrw#Cu<_CtAXoT=ouodO0-rVSDAE8e z)8o;L8_Pm;HaE^;+j*Go$v;J`HS|)V?AE}3*qjGEwVdYMh{05>Z`qA;hS&(#ho~H1 ziYQVRtb_H>A-Y$TbJmn9gD~QLS54L800xt^CF2kGjPJEY}-b zC)UckkIht*{yC`u*aVAqH#m>_Vp1-h>M^n!mmOo^KTt~iYW}aa>(!XE1lZ+xaGCw3 zDj?Oj>Hv-7i{xbH$X;!q>&B5}mX%j*7W-lmuH%%qgN1G%7-%wN4s{HE4>M2tOphZ4 zwq5KiR9K=}A(ghinMj*~wHB*Z z1DwqMGiC4up*c6Kjy%E%<|@#Ybr2fqQv8@L>X^8Qi?S2P>#~z^iuZ&vF3~n3CdTHQ z=JY5a)#`>g%h$|LBwKkb%GVBF-7Q(V;n)FW&@vm%FHYxGajF#8Sbn{&7+>znYiKCt zCA7_?SLbgHoZ% zPGhV|S41C17>s?69F?nn&obuegR<}a%=C9;iWbnloE$VCJ5T#3ic;gVZ)!=dTWOgk z{2bo*4n0b$v_1_1GWN4jZgJ1m%E$#OH~+4>(}h0u8yHX-UD!69b8Y)=N-p!6X-a_f z#Y%2{qnwBS%JKI|CN_Tlx^&sLE~&)i>?*pm;v|;L?=jVborhTv_(!jr(T$vRxy8Ro zCo{x!(LOxh!*3ahsr})Cf4*Ea(c=A8%O>y6Vj2Wti2Sr*xstS_1=UfhXbE&zE@{g7kPZPJW4|Vi@m=T-DqU6c`D~HVfR|JDi{O zo%+&xJ7pzUBw24W=t}Hn>6^+yWx>w%@0fQRm-vD~%4hjoe9OoYx!5>nV*BeNVdR&y zEq4(2R*ZP(#$JClb`Td2R{rtIj3n7Mvzt;9aIE~=WEkT|EJt9=kij@m58mh5_H>-j z!)$TRyQhLz;*B6Fq2}WguT0{JCYb0Zn4}aw^Veyl(P}Cto;7I7_^jglN{h0XvC*qb zKF$;=1GvowBcFzMqnu<#pm?0{=|>W#+9Tb=A13&>E@8aJ{amohF2gt6sHa2Kth@_C z>DaZH*XYiJ&Mixar(_fbpg(6?alK56+7bwNarBMQ*JGM5z{ICO$7L5Y~1SpnvXo;Vv#2i=umnHS)pm zymARA%K6L$9?f_TLiF5G@FnP52ifbnUG^#MI?PD>?^y|okALV4eHcogOMxwddp#~- zNeSer^0tB?PXz@ zHQhTvGVfNtj6i_8F3YDUbLZ??2+>x7fq`qC`dV&vxPmYmXs=`pLh&}bDv6Ye(2S(B zuyW?V`=B17*_n~R6PvcIz8XMC^b0y^jVeEh#bqa~azl;Js$%dyX2|=Y`|PQ>Bvx^V zeKBsWvvtNBULaCMl?MKQ(xiEf&UA-28NOZ}Z;T#vkg0sYHKuq2p(zGi7FKW3G3|;T z`!F2vSH|4i{O0LtkIsSddxYvJdxcqM8P&i_@Oj-BLf)6#ikYa@sRI(d8q%Q2;C|L-p%XeHCyT3*Lq&Kr zbJ>8F&-A0d?YUW4Pbg3Q0Xl><^F+KU`RtG^ZlTAVEPYIaA+3pMbI2>H@N28ex}5ZO z%4!xkHl}H0@Vvj%#f|)Q-%F=U>|kOhkyUZ!FU0hVqy9VUaiY}2NNIjhwrwTgf~f(E-e{2kSL+2WZ!D(=RZkBc?A}-MgO@Q-TjlbL7K+xiLCVa zz7qe3OWpsvKcwbjF?G7utX@dpda0}2AT19PdREF$ zP8Xyh`7;P53;|(=L=u;PgKVP}1$5Q=P6G9W{J-8ZBa!yf!9K0uBP?co2GWdHoXxXj z(bp>G221bL#(3Y4=G(6@xF!d;AD*!!WhRNIkYUhjDSW`WZio~&a&*r0CKLSs>Yxby zp1YQ*zR^b$44*v2CLn+2hp}afiP=+u{fdlJB%;YAai;3KU=Z$c0s*l@JqruaY!N+d zB2DghBzD>b>NMpL0#Yx{5Z>Hu_mQZ0-xB?P@Nr|D1q`?hY5~mmKwV)*E9w71&qB_F z$q17Rtr=z3t^YijYbU||UsMQ3qKh(N1v+;VmZ7k#x^0kuYp(CiHCk0b%l>0_hYBiF zQD3O$`adzrZ3$PS``eiTT;W)pfrZ zFa%pmTz<&$)k*TJI5vxsaCV!oBHHqYF$PBnRSY2@be}+6<~-?f4cL(B{ssA8 z0wz2lpx~z}q=Uh{r^hX}SvPlGLEZ$Pt}48+?KbCa((GVrAyPEhQ{3vv7vP>PKw_^vT~^E z_QNkD@{%f_Jo(p<$6P#-+SkPL3l}6bon!@q7g+j#2;~LMGYmG({KfH%;o@}6(AhZ9 zRKC;AIqK#TL#$8UTt0g5>)Y2wv-+TqQSM(dE}e75`r7wyCRHw+sw<^Yb~%q!<8MV( zw=`#fFNsokYn7)%r&@pf%#T9gS9w`ea{7r_hzuK@3A!*UZS#5*N#R?r@A+A9G^Sew z`%CVr(9GxciDK;{L7Dn=3^UsB8RX^2wMX7x)-0Y<0e}#GIwK%?Qc7!viU$Ha0dk}j`ulQ@+&fJrJgV6x?e<+jH%Tc@h{)jpaO zavtyS)b=%7y2zJ^_i+qMa?IS^I-~bmA%2PFL$TB0VJR6h6n>{T#dCuYFn{{4(UISr z*P?uCPZ8^D5xkpUhM-nH8R4a#lE|u}gDU4zJc?TIsvXe+8g$xg7Zz+FcaMX`<*HMW zX43|O3zCEYjhfb#sh3ja$^rkC*rd;09E>ztc}`c4JHEH{ocFiK{n+zYFU4r8FSlGh zvADgCYyoJs*kN_X>Wn(x-E%z;boP29>Tf~szR@qHu;jAW9!K}hr=Fz0z9wzBup7f* zLU~kJ7)15!@18E18A@l3W z+61c)UAB#JOGT6}@UP+@Xy*u!`IdJA(R(^%f zL&5Jzuhu>I$_l|WE%Wax z9(GCW>m`AGln@P>y|H!kgABm=@Rmf^;s}&1mrL>39>dP|lPGs{zE;N^PS;{RqLDBq zmbxj=e-rVWuiMfiH4!(idpy~wAPn#^vSGeBw9pL<47|MVF_Q9V7xWrP!TWgi#nvqh zHr|$1cAZzr+1)meeqcLM?xpk9sb@&3x-QhY$LIB6;^6_Z{DPn6J4_p&Y#K3BSiV@N%G-%?lJ`H&j)q58Oz z|MEz$pO?k+jIMmryZ0XPQ$O`Jt6Q=0pSRsbOM~CGXwdx<&8IzLA5GWrs73q2a^BUk z4m|^S?hfLo&33P?+`_(DSpWhXSGVmVqzuoSLHw+0nK~^tCsk=uM|ipB>zIpN{fD;< znD3G+>!tW(bJ?54lyAq=r{4`CFCeKEt1?{pF;{waBFf z^+BaJLcGr<51za*Z2LS&+8AM9(qOmRB5p4%uC9enO5J{2v)H$HvSZhh)H>>f-?S7l u=9OV)sS)$5Wz{nMhv(@Jf#($z@Nx4%gz$&S4C*g4Ku_zgW~I9Q%l`qw_w!i* From dc982fe815d28c91fa2a63af5be0769edd1f8481 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sat, 11 Jul 2015 11:58:41 -0400 Subject: [PATCH 06/65] Changelog + board added to autolathe --- code/game/machinery/doors/firedoor.dm | 1 + code/modules/research/designs/autolathe_designs.dm | 10 +++++++++- html/changelogs/Xhuis-Firelocks.yml | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Xhuis-Firelocks.yml diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index bee062feba7..817b876b1c8 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -182,6 +182,7 @@ icon = 'icons/obj/module.dmi' icon_state = "mainboard" w_class = 2 + materials = list(MAT_METAL = 50, MAT_GLASS = 50) /obj/structure/firelock_frame name = "firelock frame" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index f8a3630e062..37cd8f0c0ec 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -107,7 +107,7 @@ category = list("initial", "Electronics") /datum/design/apc_board - name = "APC Power Control Module" + name = "APC m odule" id = "power control" build_type = AUTOLATHE materials = list(MAT_METAL = 100, MAT_GLASS = 100) @@ -122,6 +122,14 @@ build_path = /obj/item/weapon/airlock_electronics category = list("initial", "Electronics") +/datum/design/firelock_board + name = "Firelock circuitry" + id = "firelock_board" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/weapon/firelock_board + category = list("initial", "Electronics") + /datum/design/airalarm_electronics name = "Air alarm electronics" id = "airalarm_electronics" diff --git a/html/changelogs/Xhuis-Firelocks.yml b/html/changelogs/Xhuis-Firelocks.yml new file mode 100644 index 00000000000..12116c1ed1c --- /dev/null +++ b/html/changelogs/Xhuis-Firelocks.yml @@ -0,0 +1,6 @@ +author: Dorsidwarf +delete-after: True + +changes: + - rscadd: "Firelocks may now be constructed and deconstructed with standard tools. Circuit boards can be produced at a standard autolathe." + From 3bc29a74e6d2dce78277df5257a2d4089d605c1a Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Sat, 11 Jul 2015 22:57:08 -0600 Subject: [PATCH 07/65] Adds a Join Queue if the server exceeds its hard population cap Players can join a queue that will notify them with a message and sound when a slot becomes available. First come first serve. Players have approximately 20 seconds to join after the notification. Failure to join in that window removes them from the queue, to remove AFKers. I haven't tested the code yet but it's basically done. --- code/controllers/subsystem/ticker.dm | 24 +++++++++++++++++++++++ code/modules/mob/new_player/new_player.dm | 21 +++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 064f438da46..186d713c717 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -41,6 +41,9 @@ var/datum/subsystem/ticker/ticker var/totalPlayers = 0 //used for pregame stats on statpanel var/totalPlayersReady = 0 //used for pregame stats on statpanel + var/queue_delay = 0 + var/list/queued_players = list() //used for join queues when the server exceeds the hard population cap + var/obj/screen/cinematic = null //used for station explosion cinematic @@ -97,6 +100,7 @@ var/datum/subsystem/ticker/ticker if(GAME_STATE_PLAYING) mode.process(wait * 0.1) + check_queue() if(!mode.explosion_in_progress && mode.check_finished() || force_ending) current_state = GAME_STATE_FINISHED @@ -434,3 +438,23 @@ var/datum/subsystem/ticker/ticker if(randomtips.len) world << "Tip of the round: [html_encode(pick(randomtips))]" +/datum/subsystem/ticker/proc/check_queue() + if(!queued_players.len || !config.hard_popcap) + return + + queue_delay ++ + var/mob/new_player/next_in_line = queued_players[1] + + switch(queue_delay) + if(5) //every 5 ticks check if there is a slot available + if(living_player_count() < config.hard_popcap) + if(next_in_line && next_in_line.client) + next_in_line << "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<." + next_in_line << sound('sound/misc/notice1.ogg') + return + queued_players -= next_in_line //Client disconnected, remove he + queue_delay = 0 //No vacancy: restart timer + if(20 to INFINITY) //No response from the next in line when a vacancy exists, remove he + next_in_line << "No response recieved. You have been removed from the line." + queued_players -= next_in_line + queue_delay = 0 \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 009ecd8ab0f..6792cd67949 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -126,13 +126,28 @@ if(!ticker || ticker.current_state != GAME_STATE_PLAYING) usr << "The round is either not ready, or has already finished..." return + var/relevant_cap if(config.hard_popcap && config.extreme_popcap) relevant_cap = min(config.hard_popcap, config.extreme_popcap) else relevant_cap = max(config.hard_popcap, config.extreme_popcap) - if(relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in admin_datums)) + + if(ticker.queued_players.len || (relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in admin_datums))) + var/queue_position = ticker.queued_players.Find(usr) + + if(queue_position == 1 && living_player_count() < relevant_cap) //Let them join if there is a slot available and they are the next one in line + LateChoices() + return + usr << "[config.hard_popcap_message]" + if(queue_position == 1) + usr << "You are next in line to join the game. You will be notified when a slot opens up." + else if(queue_position) + usr << "There are [queue_position-1] players in front of you in the queue to join the game." + else + ticker.queued_players += usr + usr << "You have been added to the queue to join the game. Your position in queue is [ticker.queued_players.len]." return LateChoices() @@ -234,6 +249,10 @@ src << alert("[rank] is not available. Please try another.") return 0 + //Remove the player from the join queue if he was in one and reset the timer + ticker.queued_players -= src + ticker.queue_delay = 4 + SSjob.AssignRole(src, rank, 1) var/mob/living/carbon/human/character = create_character() //creates the human and transfers vars and mind From a3efc91ab9f3c4eb4981edebe12ce6f6ebd8c2e8 Mon Sep 17 00:00:00 2001 From: NullQuery Date: Sun, 12 Jul 2015 13:37:18 +0200 Subject: [PATCH 08/65] Modifications to crew monitoring computer, procqueue and html_interface. - procqueue: You can now schedule procs to be executed at some point in the future. - Crew monitoring: see issue #10498 - html_interface: fix for Nanotrasen-style windows, refactor Javascript files and move them in their own folder - Includes changelog entry for the crew monitoring changes. --- code/controllers/subsystem/procqueue.dm | 55 ++-- code/game/machinery/computer/crew.css | 37 ++- code/game/machinery/computer/crew.dm | 25 +- code/game/machinery/computer/crew.js | 240 +++++++++++++++--- .../{ => css}/bootstrap.min.css | 0 .../{ => css}/html_interface.css | 0 code/modules/html_interface/html_interface.dm | 25 +- .../html_interface/html_interface.html | 1 + .../html_interface/{ => js}/bootstrap.min.js | 0 .../html_interface/{ => js}/html_interface.js | 0 .../html_interface/{ => js}/jquery.min.js | 0 .../html_interface/nanotrasen/nanotrasen.dm | 2 +- html/changelogs/nullquery-hi-extended.yml | 10 + 13 files changed, 312 insertions(+), 83 deletions(-) rename code/modules/html_interface/{ => css}/bootstrap.min.css (100%) rename code/modules/html_interface/{ => css}/html_interface.css (100%) rename code/modules/html_interface/{ => js}/bootstrap.min.js (100%) rename code/modules/html_interface/{ => js}/html_interface.js (100%) rename code/modules/html_interface/{ => js}/jquery.min.js (100%) create mode 100644 html/changelogs/nullquery-hi-extended.yml diff --git a/code/controllers/subsystem/procqueue.dm b/code/controllers/subsystem/procqueue.dm index daf762927c9..be9323e5638 100644 --- a/code/controllers/subsystem/procqueue.dm +++ b/code/controllers/subsystem/procqueue.dm @@ -9,38 +9,53 @@ var/datum/subsystem/procqueue/procqueue /datum/subsystem/procqueue/fire() if (queue.len) var/list/L = list() - var/key for (var/datum/procqueue_item/item in queue) - key = "[item.ref]_[item.procname]" + if (!item.runafter || item.runafter-- <= 0) + if (!(item.id in L)) + if (item.args) call(item.ref, item.procname)(arglist(item.args)) + else call(item.ref, item.procname)() - if (item.args) - key += "(" - var/first = 1 - for (var/a in item.args) - if (!first) key += "," - key += "[a]" - first = 0 - key += ")" + L.Add(item.id) - if (!(key in L)) - if (item.args) call(item.ref, item.procname)(arglist(item.args)) - else call(item.ref, item.procname)() - - L.Add(key) - - queue.Cut() + queue.Remove(item) /datum/subsystem/procqueue/proc/queue(ref, procname, ...) + var/list/L = args.Copy() + + L.Insert(1, 0) + + src.schedule(arglist(L)) + +/datum/subsystem/procqueue/proc/schedule(time, ref, procname, ...) var/datum/procqueue_item/item = new/datum/procqueue_item item.ref = ref item.procname = procname - if (args.len > 2) - item.args = args.Copy(3) + if (args.len > 3) + item.args = args.Copy(4) + + if (time > 0) item.runafter = time / 10 + + item.id = "[item.ref]_[item.procname]" + + if (item.args) + item.id += "(" + var/first = 1 + for (var/a in item.args) + if (!first) item.id += "," + item.id += "[a]" + first = 0 + item.id += ")" + + for (var/datum/procqueue_item/candidate in queue) + if (candidate.id == item.id) + return src.queue.Insert(1, item) +/datum/procqueue_item/var/id +/datum/procqueue_item/var/runafter /datum/procqueue_item/var/ref /datum/procqueue_item/var/procname -/datum/procqueue_item/var/list/args \ No newline at end of file +/datum/procqueue_item/var/list/args diff --git a/code/game/machinery/computer/crew.css b/code/game/machinery/computer/crew.css index 49c0c92437a..2ebb2e2dda8 100644 --- a/code/game/machinery/computer/crew.css +++ b/code/game/machinery/computer/crew.css @@ -1,6 +1,6 @@ body { - padding-left: 490px; + padding-left: 53%; cursor: default; } @@ -15,11 +15,19 @@ body top: 8px; left: 8px; border: 2px inset #888; + overflow: hidden; + min-width: 480px; + min-height: 480px; + width: 53%; + height: 100%; + max-width: 480px; + max-height: 480px; } #textbased { width: 100%; + padding-left: 20px; } #textbased table @@ -51,11 +59,10 @@ body clear: both; } -a { display: none; } - .health { width: 16px; + height: 16px; background-color: #FFF; border: 1px solid #434343; position: relative; @@ -69,6 +76,12 @@ a { display: none; } .health-1 { background-color: #e74c3c; } .health-0 { background-color: #ed2814; } +.health > div +{ + margin-left: 20px; + margin-top: -4px; +} + .tt { position: relative; @@ -106,7 +119,6 @@ a { display: none; } .dot { - transition: .2s all; position: absolute; width: 3px; height: 3px; @@ -122,4 +134,21 @@ a { display: none; } height: 8px; margin-top: -2px; margin-left: -3px; +} + +.zoom +{ + position: fixed; + left: 53%; + top: 10px; + display: block; + width: 24px; + height: 24px; + text-align: center; + margin-left: 20px !important; +} + +.zoom.in +{ + margin-left: -3px !important; } \ No newline at end of file diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 53b62bee531..3f2c3d52e75 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -97,12 +97,16 @@ var/global/datum/crewmonitor/crewmonitor = new hi = src.interfaces["[z]"] - hi.updateContent("content", "Switch to mini map Switch to text-based
") + hi.updateContent("content", "
") src.update(z, TRUE) else hi = src.interfaces["[z]"] + // Debugging purposes + mob << browse_rsc(file("code/game/machinery/computer/crew.js"), "crew.js") + mob << browse_rsc(file("code/game/machinery/computer/crew.css"), "crew.css") + hi = src.interfaces["[z]"] hi.show(mob) src.updateFor(mob, hi, z) @@ -110,13 +114,13 @@ var/global/datum/crewmonitor/crewmonitor = new /datum/crewmonitor/proc/updateFor(hclient_or_mob, datum/html_interface/hi, z) // This check will succeed if updateFor is called after showing to the player, but will fail // on regular updates. Since we only really need this once we don't care if it fails. - var/list/parameters = list(ismob(hclient_or_mob) && isAI(hclient_or_mob) ? "true" : "false") - - hi.callJavaScript("clearAll", parameters, hclient_or_mob) + hi.callJavaScript("clearAll", null, hclient_or_mob) for (var/list/L in data) hi.callJavaScript("add", L, hclient_or_mob) + hi.callJavaScript("onAfterUpdate", null, hclient_or_mob) + /datum/crewmonitor/proc/update(z, ignore_unused = FALSE) if (src.interfaces["[z]"]) var/datum/html_interface/hi = src.interfaces["[z]"] @@ -234,17 +238,6 @@ var/global/datum/crewmonitor/crewmonitor = new if (AI && AI.eyeobj && current_loc == AI.eyeobj.loc) AI.switchCamera(C) -/* -/proc/crewscan() - var/list/tracked = list() - for(var/mob/living/carbon/human/H in mob_list) - if(istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = H.w_uniform - if(U.has_sensor && U.sensor_mode) - tracked.Add(H) - return tracked -*/ - /mob/living/carbon/human/Move() if (src.w_uniform) var/old_z = src.z @@ -257,7 +250,7 @@ var/global/datum/crewmonitor/crewmonitor = new return ..() /datum/crewmonitor/proc/queueUpdate(z) - procqueue.queue(crewmonitor, "update", z) + procqueue.schedule(50, crewmonitor, "update", z) /datum/crewmonitor/proc/generateMiniMaps() spawn diff --git a/code/game/machinery/computer/crew.js b/code/game/machinery/computer/crew.js index 6db71d7d3c4..e29fda21061 100644 --- a/code/game/machinery/computer/crew.js +++ b/code/game/machinery/computer/crew.js @@ -207,34 +207,177 @@ * Crew manifest script */ -var isAI = null; +var minimap_height = 480; var scale_x; var scale_y; +var zoom_factor = null; +var minimap_mousedown = false; +var minimap_mousedown_scrollLeft; +var minimap_mousedown_scrollTop; +var minimap_mousedown_clientX; +var minimap_mousedown_clientY; +var minimap_mousedown_counter = 0; function disableSelection(){ return false; }; $(window).on("onUpdateContent", function() { - $("#textbased").html("

Name

 

Position

"); + $("#textbased").html("

Name

 

Position

"); - $("#minimap").append(""); + $("#minimap").append(""); $("body")[0].onselectstart = disableSelection; - var width = $("#minimap").width(); - - scale_x = width / (maxx * tile_size); - scale_y = width / (maxy * tile_size); // height is assumed to be the same - $("#minimap").on("click", function(e) { - var x = ((((e.clientX - 8) / scale_x) / tile_size) + 1).toFixed(0); - var y = ((maxy - (((e.clientY - 8) / scale_y) / tile_size)) + 1).toFixed(0); + if (!$(e.target).is(".zoom,.dot")) + { + var x = ((((e.clientX + this.scrollLeft - 8) / scale_x) / tile_size) + 1).toFixed(0); + var y = ((maxy - (((e.clientY + this.scrollTop - 8) / scale_y) / tile_size)) + 1).toFixed(0); - window.location.href = "byond://?src=" + hSrc + "&action=select_position&x=" + x + "&y=" + y; + window.location.href = "byond://?src=" + hSrc + "&action=select_position&x=" + x + "&y=" + y; + } + }).on("mousedown", function(e) + { + minimap_mousedown_scrollLeft = this.scrollLeft; + minimap_mousedown_scrollTop = this.scrollTop; + minimap_mousedown_clientX = e.clientX; + minimap_mousedown_clientY = e.clientY; + + var c = ++minimap_mousedown_counter; + setTimeout(function() + { + if (c == minimap_mousedown_counter) + { + minimap_mousedown = true; + $("#minimap").css("cursor", "move"); + } + }, 100); }); + + $(document).on("mousemove", function(e) + { + if (minimap_mousedown) + { + var offsetX = minimap_mousedown_clientX - e.clientX; + var offsetY = minimap_mousedown_clientY - e.clientY; + + var minimap = document.getElementById("minimap"); + minimap.scrollLeft = minimap_mousedown_scrollLeft + offsetX; + minimap.scrollTop = minimap_mousedown_scrollTop + offsetY; + } + }).on("mouseup", function() + { + ++minimap_mousedown_counter; + if (minimap_mousedown) + { + document.body.focus(); + minimap_mousedown = false; + $("#minimap").css("cursor", ""); + } + }); + + $(window).on("resize", onResize); + + scaleMinimap(1.00); }); +function zoomIn() +{ + scaleMinimap(Math.min(6.00, zoom_factor + 1.00)); +} + +function zoomOut() +{ + scaleMinimap(Math.max(1.00, zoom_factor - 1.00)); +} + +function scaleMinimap(factor) +{ + var $minimap = $("#minimap"); + + if (factor != zoom_factor) + { + zoom_factor = factor; + + var old_map_width = $minimap.width(); + var old_map_height = $minimap.height(); + var old_canvas_size = $("#minimap > img").height(); // height is assumed to be the same + var new_canvas_size = minimap_height * factor; // ditto + + var old_scrollLeft = $minimap[0].scrollLeft; + var old_scrollTop = $minimap[0].scrollTop; + + var old_factor = old_canvas_size / minimap_height; + var diff_factor = factor - old_factor; + + var old_centerX = ((old_map_width / 2) * diff_factor) + old_scrollLeft; + var old_centerY = ((old_map_height / 2) * diff_factor) + old_scrollTop; + + $("#minimap > img").css("height", new_canvas_size + "px"); + $minimap.css("max-width", new_canvas_size + "px"); + + var new_map_width = $minimap.width(); + var new_map_height = $minimap.height(); + + var new_centerX = (new_map_width / 2) + old_centerX; + var new_centerY = (new_map_height / 2) + old_centerY; + + var scrollLeft = new_centerX - (new_map_width / 2); + var scrollTop = new_centerY - (new_map_height / 2); + + scale_x = new_canvas_size / (maxx * tile_size); + scale_y = new_canvas_size / (maxy * tile_size); + + onResize(); + + $minimap[0].scrollLeft = scrollLeft; + $minimap[0].scrollTop = scrollTop; + + $(".dot").each(function() + { + var $this = $(this); + var tx = translateX(parseInt($this.attr("data-x"))); + var ty = translateY(parseInt($this.attr("data-y"))); + + // Workaround for IE bug where it doesn't modify the positions. + setTimeout(function(){ $this.css({ "top": ty + "px", "left": tx + "px" });}, 0); + }); + } +} + +function onResize() +{ + if (zoom_factor == 1.00) + { + $(".zoom").css("left", "442px"); + $("#minimap").css("max-height", Math.min($(window).height() - 16, 480) + "px"); + } + else + { + $(".zoom").css("left", ($("#minimap").width() - 34) + "px"); + $("#minimap").css("max-height", Math.min($(window).height() - 16, $("#minimap > img").height()) + "px"); + } + + if (expandHealth()) + { + $(".colhealth").css("width", "150px"); + $(".health").removeClass("tt"); + } + else + { + $(".colhealth").css("width", "24px"); + $(".health").addClass("tt"); + } + + $("body").css("padding-left", Math.min($(window).width() - 400, $("#minimap").width() - 10) + "px"); +} + +function expandHealth() +{ + return $("#textbased").width() > 510; +} + var updateMap = true; function switchTo(i) @@ -251,13 +394,20 @@ function switchTo(i) } } -function clearAll(ai) +var orig_scrollTop = 0; + +function clearAll() { - if (isAI === null) { isAI = (ai == "true"); } + orig_scrollTop = $(window).scrollTop(); $("#textbased-tbody").empty(); $("#minimap .dot").remove(); } +function onAfterUpdate() +{ + $(window).scrollTop(orig_scrollTop); +} + function isHead(ijob) { return (ijob % 10 == 0); // head roles always end in 0 @@ -291,21 +441,17 @@ function add(name, assignment, ijob, life_status, dam1, dam2, dam3, dam4, area, var avg_dam = parseInt(dam1) + parseInt(dam2) + parseInt(dam3) + parseInt(dam4); var i; - if (isAI) { i = -1; } - else - { - if (avg_dam <= 0) { i = 5; } - else if (avg_dam <= 25) { i = 4; } - else if (avg_dam <= 50) { i = 3; } - else if (avg_dam <= 75) { i = 2; } - else { i = 0; } - } + if (avg_dam <= 0) { i = 5; } + else if (avg_dam <= 25) { i = 4; } + else if (avg_dam <= 50) { i = 3; } + else if (avg_dam <= 75) { i = 2; } + else { i = 0; } - healthHTML = "
(" + dam1 + "/" + dam2 + "/" + dam3 + "/" + dam4 + ")
"; + healthHTML = "
(" + dam1 + "/" + dam2 + "/" + dam3 + "/" + dam4 + ")
"; } else { - healthHTML = "
Not Available
"; + healthHTML = "
Not Available
"; } var trElem = $("").attr("data-ijob", ijob); @@ -341,14 +487,21 @@ function add(name, assignment, ijob, life_status, dam1, dam2, dam3, dam4, area, trElem.append(tdElem); - tdElem = $(""); + tdElem = $(""); tdElem.html(healthHTML); trElem.append(tdElem); tdElem = $(""); - if (area && pos_x && pos_y) { tdElem.append($("
").text(area).addClass("tt").append($("
").append($("").text("(" + pos_x + ", " + pos_y + ")")))); } + if (area && pos_x && pos_y) + { + tdElem.append($("
").text(area).addClass("tt").append($("
").append($("").text("(" + pos_x + ", " + pos_y + ")")))); + tdElem.css("cursor", "pointer").on("click", function() + { + window.clipboardData.setData("Text", pos_x + ", " + pos_y); + }); + } else { tdElem.text("Not Available"); } trElem.append(tdElem); @@ -363,20 +516,24 @@ function add(name, assignment, ijob, life_status, dam1, dam2, dam3, dam4, area, var x = parseInt(pos_x); var y = maxy - parseInt(pos_y); - var tx = (translate(x - 1, scale_x) - 1.5).toFixed(0); - var ty = (translate(y - 1, scale_y) + 3).toFixed(0); + var tx = translateX(x); + var ty = translateY(y); - var dotElem = $("
"); + var dotElem = $("
"); $("#minimap").append(dotElem); + var counter = 0; + function enable() { + ++counter; dotElem.addClass("active").css({ "border-color": color }); } function disable() { + ++counter; dotElem.removeClass("active").css({ "border-color": "transparent" }); } @@ -388,7 +545,27 @@ function add(name, assignment, ijob, life_status, dam1, dam2, dam3, dam4, area, window.location.href = "byond://?src=" + hSrc + "&action=select_person&name=" + encodeURIComponent(name); } - trElem.on("mouseover", enable).on("mouseout", disable).on("click", click); + trElem.on("mouseover", function() + { + enable(); + + if (zoom_factor > 1.00) + { + var c = counter; + setTimeout(function() + { + if (c == counter) + { + var minimap = document.getElementById("minimap"); + var half = $(minimap).height() / 2; + var offset = $(dotElem).offset(); + + minimap.scrollLeft = offset.left + minimap.scrollLeft - half; + minimap.scrollTop = offset.top + minimap.scrollTop - half; + } + }, 100); + } + }).on("mouseout", disable).on("click", click); dotElem.on("mouseover", function() { trElem.addClass("hover"); @@ -402,6 +579,9 @@ function add(name, assignment, ijob, life_status, dam1, dam2, dam3, dam4, area, } } +function translateX(n) { return (translate(n - 1.5, scale_x) ).toFixed(0); } +function translateY(n) { return (translate(n + 0.75, scale_y) ).toFixed(0); } + function translate(n, scale) { return (n * tile_size) * scale; diff --git a/code/modules/html_interface/bootstrap.min.css b/code/modules/html_interface/css/bootstrap.min.css similarity index 100% rename from code/modules/html_interface/bootstrap.min.css rename to code/modules/html_interface/css/bootstrap.min.css diff --git a/code/modules/html_interface/html_interface.css b/code/modules/html_interface/css/html_interface.css similarity index 100% rename from code/modules/html_interface/html_interface.css rename to code/modules/html_interface/css/html_interface.css diff --git a/code/modules/html_interface/html_interface.dm b/code/modules/html_interface/html_interface.dm index 2e3359e80c4..ffc04407f66 100644 --- a/code/modules/html_interface/html_interface.dm +++ b/code/modules/html_interface/html_interface.dm @@ -127,11 +127,11 @@ mob/verb/test() /datum/html_interface/proc/specificRenderTitle(datum/html_interface_client/hclient, ignore_cache = FALSE) /datum/html_interface/proc/sendResources(client/client) - client << browse_rsc('jquery.min.js') - client << browse_rsc('bootstrap.min.js') - client << browse_rsc('bootstrap.min.css') - client << browse_rsc('html_interface.css') - client << browse_rsc('html_interface.js') + client << browse_rsc('js/jquery.min.js', "jquery.min.js") + client << browse_rsc('js/bootstrap.min.js', "bootstrap.min.js") + client << browse_rsc('css/bootstrap.min.css', "bootstrap.min.css") + client << browse_rsc('css/html_interface.css', "html_interface.css") + client << browse_rsc('js/html_interface.js', "html_interface.js") /datum/html_interface/proc/createWindow(datum/html_interface_client/hclient) winclone(hclient.client, "window", "browser_\ref[src]") @@ -212,14 +212,15 @@ mob/verb/test() // causing file not found errors. // src.sendResources(hclient.client) - if (winexists(hclient.client, "browser_\ref[src]")) - src._renderTitle(hclient, TRUE) - src._renderLayout(hclient) - else + if (!winexists(hclient.client, "browser_\ref[src]")) src.createWindow(hclient) - hclient.is_loaded = FALSE - hclient.client << output(replacetextEx(replacetextEx(file2text('html_interface.html'), "\[hsrc\]", "\ref[src]"), "", "[head]"), "browser_\ref[src].browser") - winshow(hclient.client, "browser_\ref[src]", TRUE) + //src._renderTitle(hclient, TRUE) + //src._renderLayout(hclient) + + hclient.is_loaded = FALSE + hclient.client << output(replacetextEx(replacetextEx(file2text('html_interface.html'), "\[hsrc\]", "\ref[src]"), "", "[head]"), "browser_\ref[src].browser") + + winshow(hclient.client, "browser_\ref[src]", TRUE) while (hclient.client && hclient.active && !hclient.is_loaded) sleep(2) diff --git a/code/modules/html_interface/html_interface.html b/code/modules/html_interface/html_interface.html index 1231c21df53..4bf76c6180a 100644 --- a/code/modules/html_interface/html_interface.html +++ b/code/modules/html_interface/html_interface.html @@ -8,6 +8,7 @@ + diff --git a/code/modules/html_interface/bootstrap.min.js b/code/modules/html_interface/js/bootstrap.min.js similarity index 100% rename from code/modules/html_interface/bootstrap.min.js rename to code/modules/html_interface/js/bootstrap.min.js diff --git a/code/modules/html_interface/html_interface.js b/code/modules/html_interface/js/html_interface.js similarity index 100% rename from code/modules/html_interface/html_interface.js rename to code/modules/html_interface/js/html_interface.js diff --git a/code/modules/html_interface/jquery.min.js b/code/modules/html_interface/js/jquery.min.js similarity index 100% rename from code/modules/html_interface/jquery.min.js rename to code/modules/html_interface/js/jquery.min.js diff --git a/code/modules/html_interface/nanotrasen/nanotrasen.dm b/code/modules/html_interface/nanotrasen/nanotrasen.dm index 1196b221785..3c1cfa47ef6 100644 --- a/code/modules/html_interface/nanotrasen/nanotrasen.dm +++ b/code/modules/html_interface/nanotrasen/nanotrasen.dm @@ -21,7 +21,7 @@ The client is optional and may be a /mob, /client or /html_interface_client obje src.head = src.head + "" src.updateLayout("") -/datum/html_interface/updateLayout(layout) +/datum/html_interface/nanotrasen/updateLayout(layout) // Wrap the layout in our custom HTML return ..("
[layout]
") diff --git a/html/changelogs/nullquery-hi-extended.yml b/html/changelogs/nullquery-hi-extended.yml new file mode 100644 index 00000000000..592b15ae7fd --- /dev/null +++ b/html/changelogs/nullquery-hi-extended.yml @@ -0,0 +1,10 @@ +author: NullQuery + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +changes: + - tweak: "Crew monitoring: The minimap now supports scaling. You can zoom in and out using the buttons. Hovering over an entry in the table centers the minimap on that part of the screen." + - tweak: "Crew monitoring: If the window is wide enough the health indicator will expand to show full health data (if available)." + - tweak: "Crew monitoring: Clicking on the area name will now copy the coordinates to your clipboard." + - tweak: "Crew monitoring: The AI can view health information again, but there is a 5 second delay between updates for everyone watching." From 1c43425304847e92ee4ff33ab58ca23ff7181ef1 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Sun, 12 Jul 2015 09:50:57 -0600 Subject: [PATCH 09/65] Tested and Tweaked --- code/controllers/subsystem/ticker.dm | 7 +++--- code/modules/mob/new_player/new_player.dm | 28 ++++++++++++++--------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 186d713c717..2dde3ff7ac4 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -442,19 +442,20 @@ var/datum/subsystem/ticker/ticker if(!queued_players.len || !config.hard_popcap) return - queue_delay ++ + queue_delay++ var/mob/new_player/next_in_line = queued_players[1] switch(queue_delay) if(5) //every 5 ticks check if there is a slot available if(living_player_count() < config.hard_popcap) if(next_in_line && next_in_line.client) - next_in_line << "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<." + next_in_line << "A slot has opened! You have approximately 20 seconds to join. \>\>Join Game\<\<" next_in_line << sound('sound/misc/notice1.ogg') + next_in_line.LateChoices() return queued_players -= next_in_line //Client disconnected, remove he queue_delay = 0 //No vacancy: restart timer - if(20 to INFINITY) //No response from the next in line when a vacancy exists, remove he + if(25 to INFINITY) //No response from the next in line when a vacancy exists, remove he next_in_line << "No response recieved. You have been removed from the line." queued_players -= next_in_line queue_delay = 0 \ No newline at end of file diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 6792cd67949..0b5158f6085 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -82,6 +82,13 @@ if(!client) return 0 + //Determines Relevent Population Cap + var/relevant_cap + if(config.hard_popcap && config.extreme_popcap) + relevant_cap = min(config.hard_popcap, config.extreme_popcap) + else + relevant_cap = max(config.hard_popcap, config.extreme_popcap) + if(href_list["show_preferences"]) client.prefs.ShowChoices(src) return 1 @@ -127,20 +134,14 @@ usr << "The round is either not ready, or has already finished..." return - var/relevant_cap - if(config.hard_popcap && config.extreme_popcap) - relevant_cap = min(config.hard_popcap, config.extreme_popcap) - else - relevant_cap = max(config.hard_popcap, config.extreme_popcap) + if(href_list["late_join"] == "override") + LateChoices() + return if(ticker.queued_players.len || (relevant_cap && living_player_count() >= relevant_cap && !(ckey(key) in admin_datums))) - var/queue_position = ticker.queued_players.Find(usr) - - if(queue_position == 1 && living_player_count() < relevant_cap) //Let them join if there is a slot available and they are the next one in line - LateChoices() - return - usr << "[config.hard_popcap_message]" + + var/queue_position = ticker.queued_players.Find(usr) if(queue_position == 1) usr << "You are next in line to join the game. You will be notified when a slot opens up." else if(queue_position) @@ -160,6 +161,11 @@ usr << "There is an administrative lock on entering the game!" return + if(ticker.queued_players.len && !(ckey(key) in admin_datums)) + if((living_player_count() >= relevant_cap) || (src != ticker.queued_players[1])) + usr << "Server is full." + return + AttemptLateSpawn(href_list["SelectedJob"]) return From da8127c7dce72cb35bdd2fe679ab29eac93ec784 Mon Sep 17 00:00:00 2001 From: Aranclanos Date: Sun, 12 Jul 2015 16:07:46 -0300 Subject: [PATCH 10/65] Moves the del log verb away from the debug verbs option, now being available from the getgo --- code/modules/admin/admin_verbs.dm | 6 ++++-- code/modules/admin/verbs/mapping.dm | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 23e0bc6142e..a600fa40991 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -126,7 +126,8 @@ var/list/admin_verbs_debug = list( /client/proc/debugNatureMapGenerator, /client/proc/check_bomb_impacts, /proc/machine_upgrade, - /client/proc/populate_world + /client/proc/populate_world, + /client/proc/cmd_display_del_log ) var/list/admin_verbs_possess = list( /proc/possess, @@ -203,7 +204,8 @@ var/list/admin_verbs_hideable = list( /client/proc/reset_all_tcs, /client/proc/panicbunker, /client/proc/admin_change_sec_level, - /client/proc/toggle_nuke + /client/proc/toggle_nuke, + /client/proc/cmd_display_del_log ) /client/proc/add_admin_verbs() diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 587b10d6160..e72ea864555 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -142,7 +142,6 @@ var/intercom_range_display_status = 0 src.verbs += /client/proc/disable_communication src.verbs += /client/proc/print_pointers src.verbs += /client/proc/count_movable_instances - src.verbs += /client/proc/cmd_display_del_log //src.verbs += /client/proc/cmd_admin_rejuvenate feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! From b570af67950d9f2deff675731e5d449c5c8934af Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 14 Jul 2015 00:51:19 +0200 Subject: [PATCH 11/65] Fixed catching banana creampie in mid throw (and similar objs). 3824 10536 (hitting a wall now makes the smashed pie effect appear ON the wall) Moved last_bumped var from movable to living. Renamed /obj/machinery/field/proc/bump to bump_field() to avoid confusion with Bump(). Same thing with /obj/effect/mine/Bumped() -> triggermine(). Fixes sprite when hunter leaps into a wall. 10428 Removed some commented code here and there. Remove allow_spin var, throw_at now uses a spin argument for that. Throwpass atom var is no longer used to check whether thrown stuff can pass stuff (now using CanPass() proc like everything else), the var is still used for some adjacency click check. A thrown mob hitting another mob now produces a sound; also thrown mob and target one no longer swap places even on help intent. A thrown mob now is lightly hurt (and weakened) if he hits a wall/mob/dense object. Nerf the damage when thrown mob hit wall.(20 -> 10) Thrown obj/mob no longer bounces off wall unless it's no grav. Heavy thrown items now push an unanchored obj/mob target. Fixes losing all momentum when getting out of a thrown closet. 6569 A lot of work on throw_at, throw_impact, and hitby to make the code more OOP. Thrown items no longer collide with border items on the side. 10479 Fixes the killer crusher. 10507 --- code/game/atoms.dm | 32 +----- code/game/atoms_movable.dm | 103 +++++++++--------- code/game/gamemodes/cult/cult_structures.dm | 15 --- code/game/machinery/bots/ed209bot.dm | 8 -- .../machinery/computer/HolodeckControl.dm | 2 +- code/game/machinery/doors/door.dm | 4 +- code/game/machinery/doors/firedoor.dm | 6 +- code/game/machinery/recycler.dm | 2 + code/game/objects/effects/mines.dm | 13 +-- code/game/objects/items.dm | 28 ++--- code/game/objects/items/toys.dm | 89 +++++++-------- code/game/objects/items/weapons/dice.dm | 2 +- .../structures/crates_lockers/closets.dm | 6 + code/game/objects/structures/mineral_doors.dm | 6 +- code/game/objects/structures/morgue.dm | 9 ++ code/game/objects/weapons.dm | 5 - code/modules/flufftext/Hallucination.dm | 45 +------- code/modules/food&drinks/food/snacks_egg.dm | 9 +- code/modules/food&drinks/food/snacks_pie.dm | 9 +- code/modules/hydroponics/grown.dm | 18 +-- .../mob/living/carbon/alien/alien_defense.dm | 4 +- .../carbon/alien/humanoid/caste/hunter.dm | 49 +-------- .../mob/living/carbon/carbon_defense.dm | 6 +- .../mob/living/carbon/human/human_defense.dm | 16 ++- .../mob/living/carbon/human/human_movement.dm | 2 +- code/modules/mob/living/living.dm | 7 +- code/modules/mob/living/living_defense.dm | 16 ++- code/modules/mob/living/living_defines.dm | 4 +- code/modules/mob/mob_movement.dm | 14 +-- .../power/singularity/containment_field.dm | 8 +- .../power/singularity/field_generator.dm | 2 +- code/modules/power/singularity/singularity.dm | 2 +- code/modules/projectiles/projectile.dm | 2 +- code/modules/reagents/reagent_containers.dm | 4 +- code/modules/telesci/bscrystal.dm | 15 +-- html/changelogs/phil235-CatchThrownPieFix.yml | 8 ++ 36 files changed, 244 insertions(+), 326 deletions(-) create mode 100644 html/changelogs/phil235-CatchThrownPieFix.yml diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 52ac867c334..95c8c95dabf 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -6,7 +6,6 @@ var/list/fingerprintshidden var/fingerprintslast = null var/list/blood_DNA - var/last_bumped = 0 var/throwpass = 0 ///Chemistry. @@ -17,10 +16,6 @@ //HUD images that this atom can provide. var/list/hud_possible - //var/chem_is_open_container = 0 - // replaced by OPENCONTAINER flags and atom/proc/is_open_container() - ///Chemistry. - var/allow_spin = 1 //Value used to increment ex_act() if reactionary_explosions is on var/explosion_block = 0 @@ -55,26 +50,6 @@ return 0 -/atom/proc/throw_impact(atom/hit_atom,mob/thrower) - if(istype(hit_atom,/mob/living)) - var/mob/living/M = hit_atom - M.hitby(src,thrower) - - else if(isobj(hit_atom)) - var/obj/O = hit_atom - if(!O.anchored) - step(O, src.dir) - O.hitby(src) - - else if(isturf(hit_atom)) - var/turf/T = hit_atom - if(T.density) - spawn(2) - step(src, turn(src.dir, 180)) - if(istype(src,/mob/living)) - var/mob/living/M = src - M.take_organ_damage(20) - /atom/proc/attack_hulk(mob/living/carbon/human/hulk, do_attack_animation = 0) if(do_attack_animation) hulk.changeNext_move(CLICK_CD_MELEE) @@ -285,9 +260,10 @@ its easier to just keep the beam vertical. /atom/proc/fire_act() return -/atom/proc/hitby(atom/movable/AM as mob|obj) - return - +/atom/proc/hitby(atom/movable/AM, mob/thrower, skip, var/hitpush) + if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav. + spawn(2) + step(AM, turn(AM.dir, 180)) var/list/blood_splatter_icons = list() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f24e6bf8e4f..8c20fc83801 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -93,17 +93,13 @@ /atom/movable/Crossed(atom/movable/AM) return -/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) - if(src.throwing) - src.throw_impact(A) - src.throwing = 0 - - if ((A && yes)) - A.last_bumped = world.time +/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump(). + if((A && yes)) + if(throwing) + throwing = 0 + throw_impact(A) + . = 1 A.Bumped(src) - return - ..() - return /atom/movable/proc/forceMove(atom/destination) if(destination) @@ -146,7 +142,6 @@ if(!direction) return 1 - var/old_dir = dir . = step(src, direction) dir = old_dir @@ -154,57 +149,60 @@ /atom/movable/proc/checkpass(passflag) return pass_flags&passflag -/atom/movable/proc/hit_check(mob/thrower) // todo: this is partly obsolete due to passflags already, add throwing stuff to mob CanPass and finish it - if(src.throwing) - for(var/atom/A in get_turf(src)) - if(A == src) continue - if(istype(A,/mob/living)) - if(A:lying) continue - src.throw_impact(A,thrower) - if(src.throwing == 1) - src.throwing = 0 - if(isobj(A)) - if(A.density && !A.throwpass) // **TODO: Better behaviour for windows which are dense, but shouldn't always stop movement - src.throw_impact(A,thrower) - src.throwing = 0 +/atom/movable/proc/throw_impact(atom/hit_atom, mob/thrower) + return hit_atom.hitby(src,thrower) -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower) +/atom/movable/hitby(atom/movable/AM, mob/thrower, skip, var/hitpush = 1) + if(!anchored && hitpush) + step(src, AM.dir) + return ..() + +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=1) if(!target || !src || (flags & NODROP)) return 0 //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target - src.throwing = 1 - if(target.allow_spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball + throwing = 1 + if(spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball SpinAnimation(5, 1) + + var/dist_travelled = 0 + var/dist_since_sleep = 0 + var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) var/dx = (target.x > src.x) ? EAST : WEST var/dy = (target.y > src.y) ? NORTH : SOUTH - var/dist_travelled = 0 - var/dist_since_sleep = 0 - - var/tdist_x = dist_x; - var/tdist_y = dist_y; - var/tdx = dx; - var/tdy = dy; if(dist_x <= dist_y) - tdist_x = dist_y; - tdist_y = dist_x; - tdx = dy; - tdy = dx; + var/olddist_x = dist_x + var/olddx = dx + dist_x = dist_y + dist_y = olddist_x + dx = dy + dy = olddx - var/error = tdist_x/2 - tdist_y - while(target && (((((dist_x > dist_y) && ((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST))) || ((dist_x <= dist_y) && ((src.y < target.y && dy == NORTH) || (src.y > target.y && dy == SOUTH))) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || !has_gravity(src))) - // only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up - if(!src.throwing) break - if(!istype(src.loc, /turf)) break + var/error = dist_x/2 - dist_y - var/atom/step = get_step(src, (error < 0) ? tdy : tdx) + var/throw_range = min(range, dist_x + dist_y) + + var/hit = 0 + while(target && (dist_travelled < throw_range || !has_gravity(src))) + // only stop when we've gone the whole distance (or max throw range) and aren't floating, or hit something, or hit the end of the map, or someone picks it up + if(!throwing) + hit = 1 + break + if(!istype(loc, /turf)) + hit = 1 + break + + var/atom/step = get_step(src, (error < 0) ? dy : dx) + error += (error < 0) ? dist_x : -dist_y if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge break - src.Move(step, get_dir(loc, step)) - hit_check(thrower) - error += (error < 0) ? tdist_x : -tdist_y; + Move(step, get_dir(loc, step)) + if(!throwing) + hit = 1 + break dist_travelled++ dist_since_sleep++ if(dist_since_sleep >= speed) @@ -212,9 +210,14 @@ sleep(1) //done throwing, either because it hit something or it finished moving - src.throwing = 0 - if(isobj(src)) - src.throw_impact(get_turf(src),thrower) + throwing = 0 + for(var/atom/A in get_turf(src)) //looking for our target on the turf we land on. + if(A == target) + hit = 1 + throw_impact(A, thrower) + + if(!hit) // we haven't hit something yet and we still must, let's hit the ground. + throw_impact(get_turf(src),thrower) return 1 diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 01bab649c0c..60cb2429040 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -24,17 +24,6 @@ name = "desk" desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl" icon_state = "tomealtar" -// luminosity = 5 - -//sprites for this no longer exist -Pete -//(they were stolen from another game anyway) -/* -/obj/structure/cult/pillar - name = "Pillar" - desc = "This should not exist" - icon_state = "pillar" - icon = 'magic_pillar.dmi' -*/ /obj/effect/gateway name = "gateway" @@ -46,11 +35,7 @@ anchored = 1.0 /obj/effect/gateway/Bumped(mob/M as mob|obj) - spawn(0) - return return /obj/effect/gateway/Crossed(AM as mob|obj) - spawn(0) - return return \ No newline at end of file diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index c1869318560..bfb6a32506b 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -397,14 +397,6 @@ Auto Patrol[]"}, return 1 return 0 -/* terrible -/obj/machinery/bot/ed209/Bumped(atom/movable/M as mob|obj) - spawn(0) - if (M) - var/turf/T = get_turf(src) - M:loc = T -*/ - /obj/machinery/bot/ed209/explode() walk_to(src,0) visible_message("[src] blows apart!") diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 62427b807e5..c46e84e7bde 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -410,6 +410,7 @@ var/mob/living/carbon/M = hit_atom playsound(src, 'sound/items/dodgeball.ogg', 50, 1) M.apply_damage(10, STAMINA) + loc = get_turf(hit_atom) //drop at the target's feet if(prob(5)) M.Weaken(3) visible_message("[M] is knocked right off \his feet!", 3) @@ -421,7 +422,6 @@ icon_state = "hoop" anchored = 1 density = 1 - throwpass = 1 /obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index abfb8ff9253..2ee4809f8d8 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -45,8 +45,8 @@ /obj/machinery/door/Bumped(atom/AM) if(operating || emagged) return - if(ismob(AM)) - var/mob/M = AM + if(isliving(AM)) + var/mob/living/M = AM if(world.time - M.last_bumped <= 10) return //Can bump-open one airlock per second. This is to prevent shock spam. M.last_bumped = world.time if(!M.restrained()) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 85f6dac25e8..f15ed458a12 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -16,8 +16,10 @@ closingLayer = 3.11 /obj/machinery/door/firedoor/Bumped(atom/AM) - if(p_open || operating) return - if(!density) return ..() + if(p_open || operating) + return + if(!density) + return ..() return 0 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index c8a121619cd..d4293072aa4 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -101,6 +101,8 @@ var/const/SAFETY_COOLDOWN = 100 if(stat & (BROKEN|NOPOWER)) return + if(!anchored) + return if(safety_mode) return diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index e1c0f16074a..4c159f7a431 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -15,17 +15,14 @@ if(isanimal(AM)) var/mob/living/simple_animal/SA = AM if(!SA.flying) - Bumped(SA) + triggermine(SA) else - Bumped(AM) - -/obj/effect/mine/Bumped(AM as mob|obj) - - if(triggered) return - visible_message("[AM] sets off \icon[src] [src]!") - triggermine(AM) + triggermine(AM) /obj/effect/mine/proc/triggermine(mob/victim) + if(triggered) + return + visible_message("[victim] sets off \icon[src] [src]!") var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 0ab94fcd813..09147da601f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -431,7 +431,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s /obj/item/singularity_pull(S, current_size) spawn(0) //this is needed or multiple items will be thrown sequentially and not simultaneously if(current_size >= STAGE_FOUR) - throw_at(S,14,3) + throw_at(S,14,3, spin=0) else ..() /obj/item/acid_act(var/acidpwr, var/acid_volume) @@ -465,26 +465,16 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s if(!findtext(desc, "it looks slightly melted...")) //it looks slightly melted... it looks slightly melted... it looks slightly melted... etc. desc += " it looks slightly melted..." //needs a space at the start, formatting +/obj/item/throw_impact(atom/A, mob/thrower) + var/itempush = 1 + if(w_class < 4) + itempush = 0 //too light to push anything + return A.hitby(src,thrower, 0, itempush) - -/obj/item/throw_impact(A) - if(throw_speed >= EMBED_THROWSPEED_THRESHOLD) - if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = A - if(can_embed(src)) - if(prob(embed_chance) && !(PIERCEIMMUNE in H.dna.species.specflags)) - H.throw_alert("embeddedobject") - var/obj/item/organ/limb/L = pick(H.organs) - L.embedded_objects |= src - add_blood(H)//it embedded itself in you, of course it's bloody! - loc = H - L.take_damage(w_class*embedded_impact_pain_multiplier) - H.visible_message("\the [name] embeds itself in [H]'s [L.getDisplayName()]!","\the [name] embeds itself in your [L.getDisplayName()]!") - return - - //Reset regardless of if we hit a human. +/obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1) + . = ..() throw_speed = initial(throw_speed) //explosions change this. - ..() + /obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/weapon/storage if(!newLoc) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 232aca31cfc..f6f8bfa4745 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -44,41 +44,40 @@ /obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user as mob, proximity) if(!proximity) return - if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1) - A.reagents.trans_to(src, 10) - user << "You fill the balloon with the contents of [A]." - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - src.update_icon() - return + if (istype(A, /obj/structure/reagent_dispensers)) + var/obj/structure/reagent_dispensers/RD = A + if(RD.reagents.total_volume <= 0) + user << "[RD] is empty." + else if(reagents.total_volume >= 10) + user << "[src] is full." + else + A.reagents.trans_to(src, 10) + user << "You fill the balloon with the contents of [A]." + desc = "A translucent balloon with some form of liquid sloshing around in it." + update_icon() /obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params) if(istype(O, /obj/item/weapon/reagent_containers/glass)) if(O.reagents) - if(O.reagents.total_volume < 1) - user << "The [O] is empty." - else if(O.reagents.total_volume >= 1) - if(O.reagents.has_reagent("facid", 1)) - user << "The acid chews through the balloon!" - O.reagents.reaction(user) - qdel(src) - else - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - user << "You fill the balloon with the contents of [O]." - O.reagents.trans_to(src, 10) - src.update_icon() - return + if(O.reagents.total_volume <= 0) + user << "[O] is empty." + else if(reagents.total_volume >= 10) + user << "[src] is full." + else + desc = "A translucent balloon with some form of liquid sloshing around in it." + user << "You fill the balloon with the contents of [O]." + O.reagents.trans_to(src, 10) + update_icon() /obj/item/toy/balloon/throw_impact(atom/hit_atom) - if(src.reagents.total_volume >= 1) - src.visible_message("\The [src] bursts!","You hear a pop and a splash.") - src.reagents.reaction(get_turf(hit_atom)) - for(var/atom/A in get_turf(hit_atom)) - src.reagents.reaction(A) - src.icon_state = "burst" - spawn(5) - if(src) - qdel(src) - return + if(!..()) //was it caught by a mob? + if(reagents.total_volume >= 1) + visible_message("[src] bursts!","You hear a pop and a splash.") + reagents.reaction(get_turf(hit_atom)) + for(var/atom/A in get_turf(hit_atom)) + reagents.reaction(A) + icon_state = "burst" + del(src) // Not qdel, because it would burst multiple times /obj/item/toy/balloon/update_icon() if(src.reagents.total_volume >= 1) @@ -514,20 +513,24 @@ icon_state = "snappop" w_class = 1 -/obj/item/toy/snappop/fire_act() - throw_impact() - return - -/obj/item/toy/snappop/throw_impact(atom/hit_atom) - ..() +/obj/item/toy/snappop/proc/pop_burst() var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - new /obj/effect/decal/cleanable/ash(src.loc) - src.visible_message("The [src.name] explodes!","You hear a snap!") + new /obj/effect/decal/cleanable/ash(loc) + visible_message("The [src.name] explodes!","You hear a snap!") playsound(src, 'sound/effects/snap.ogg', 50, 1) qdel(src) +/obj/item/toy/snappop/fire_act() + pop_burst() + return + +/obj/item/toy/snappop/throw_impact(atom/hit_atom) + if(!..()) + pop_burst() + + /obj/item/toy/snappop/Crossed(H as mob|obj) if((ishuman(H))) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H @@ -1100,12 +1103,12 @@ w_class = 2.0 /obj/item/toy/minimeteor/throw_impact(atom/hit_atom) - ..() - playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai))\ - shake_camera(M, 3, 1) - qdel(src) + if(!..()) + playsound(src, 'sound/effects/meteorimpact.ogg', 40, 1) + for(var/mob/M in range(10, src)) + if(!M.stat && !istype(M, /mob/living/silicon/ai))\ + shake_camera(M, 3, 1) + qdel(src) /* * Carp plushie diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 1a85a2e50d6..5e06f31ddb4 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -56,7 +56,7 @@ /obj/item/weapon/dice/attack_self(mob/user as mob) diceroll(user) -/obj/item/weapon/dice/throw_at(atom/target, range, speed, mob/user as mob) +/obj/item/weapon/dice/throw_at(atom/target, range, speed, mob/user as mob, spin=1) if(!..()) return diceroll(user) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 08ea4e09edd..697f718d095 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -82,12 +82,18 @@ for(var/obj/O in src) O.loc = loc + if(throwing) //you keep some momentum when getting out of a thrown closet + spawn(2) //some time to avoid a collision between the obj and the closet/crate + step(O, dir) for(var/mob/M in src) M.loc = loc if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE + if(throwing) + spawn(2) + step(M, dir) /obj/structure/closet/proc/take_contents() diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 23be1ce7c31..fe14690944a 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -65,9 +65,9 @@ /obj/structure/mineral_door/proc/TryToSwitchState(atom/user) if(isSwitchingStates) return - if(ismob(user)) - var/mob/M = user - if(world.time - user.last_bumped <= 60) return //NOTE do we really need that? + if(isliving(user)) + var/mob/living/M = user + if(world.time - M.last_bumped <= 60) return //NOTE do we really need that? if(M.client) if(iscarbon(M)) var/mob/living/carbon/C = M diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 526e9e3f028..472f46939f1 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -278,3 +278,12 @@ Crematorium Switch desc = "Apply corpse before closing." icon_state = "morguet" +/obj/structure/tray/m_tray/CanPass(atom/movable/mover, turf/target, height=0) + if(height==0) return 1 + + if(istype(mover) && mover.checkpass(PASSTABLE)) + return 1 + if(locate(/obj/structure/table) in get_turf(mover)) + return 1 + else + return 0 \ No newline at end of file diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm index adca34f56e8..e85375ba5ed 100644 --- a/code/game/objects/weapons.dm +++ b/code/game/objects/weapons.dm @@ -9,8 +9,3 @@ hitsound = 'sound/items/welder.ogg' if(damtype == "brute") hitsound = "swing_hit" - -/obj/item/weapon/Bump(mob/M as mob) - spawn(0) - ..() - return \ No newline at end of file diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 388da344db4..04c1128c9fb 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -22,14 +22,14 @@ Gunshots/explosions/opening doors/less rare audio (done) /mob/living/carbon/proc/handle_hallucinations() if(handling_hal) return - + //Least obvious var/list/minor = list("sounds"=20,"bolts_minor"=10,"whispers"=15,"message"=5) //Something's wrong here var/list/medium = list("hudscrew"=15,"items"=15,"dangerflash"=15,"bolts"=10,"flood"=10,"husks"=10,"battle"=10) //AAAAH var/list/major = list("fake"=10,"death"=5,"xeno"=10,"singulo"=10,"delusion"=10) - + var/grade = 0 var/current = list() var/trip_length = 0 @@ -171,47 +171,6 @@ Gunshots/explosions/opening doors/less rare audio (done) name = "alien hunter ([rand(1, 1000)])" return -/obj/effect/hallucination/simple/xeno/throw_at(atom/target, range, speed) // TODO : Make diagonal trhow into proc/property - if(!target || !src || (flags & NODROP)) return 0 - - src.throwing = 1 - - var/dist_x = abs(target.x - src.x) - var/dist_y = abs(target.y - src.y) - var/dist_travelled = 0 - var/dist_since_sleep = 0 - - var/tdist_x = dist_x; - var/tdist_y = dist_y; - - if(dist_x <= dist_y) - tdist_x = dist_y; - tdist_y = dist_x; - - var/error = tdist_x/2 - tdist_y - while(target && (((((dist_x > dist_y) && ((src.x < target.x) || (src.x > target.x))) || ((dist_x <= dist_y) && ((src.y < target.y) || (src.y > target.y))) || (src.x > target.x)) && dist_travelled < range) || !has_gravity(src))) - - if(!src.throwing) break - if(!istype(src.loc, /turf)) break - - var/atom/step = get_step(src, get_dir(src,target)) - if(!step) - break - src.Move(step, get_dir(src, step)) - hit_check() - error += (error < 0) ? tdist_x : -tdist_y; - dist_travelled++ - dist_since_sleep++ - if(dist_since_sleep >= speed) - dist_since_sleep = 0 - sleep(1) - - - src.throwing = 0 - src.throw_impact(get_turf(src)) - - return 1 - /obj/effect/hallucination/simple/xeno/throw_impact(A) update_icon("alienh_pounce") if(A == target) diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food&drinks/food/snacks_egg.dm index 08e3076e190..c575cd8a57b 100644 --- a/code/modules/food&drinks/food/snacks_egg.dm +++ b/code/modules/food&drinks/food/snacks_egg.dm @@ -18,10 +18,11 @@ filling_color = "#F0E68C" /obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/egg_smudge(src.loc) - reagents.reaction(hit_atom, TOUCH) - del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. + if(!..()) //was it caught by a mob? + var/turf/T = get_turf(hit_atom) + new/obj/effect/decal/cleanable/egg_smudge(T) + reagents.reaction(hit_atom, TOUCH) + qdel(src) /obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype( W, /obj/item/toy/crayon )) diff --git a/code/modules/food&drinks/food/snacks_pie.dm b/code/modules/food&drinks/food/snacks_pie.dm index e4fe6700f67..6a9be926630 100644 --- a/code/modules/food&drinks/food/snacks_pie.dm +++ b/code/modules/food&drinks/food/snacks_pie.dm @@ -23,10 +23,11 @@ list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) /obj/item/weapon/reagent_containers/food/snacks/pie/cream/throw_impact(atom/hit_atom) - ..() - new/obj/effect/decal/cleanable/pie_smudge(src.loc) - reagents.reaction(hit_atom, TOUCH) - del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. + if(!..()) //was it caught by a mob? + var/turf/T = get_turf(hit_atom) + new/obj/effect/decal/cleanable/pie_smudge(T) + reagents.reaction(hit_atom, TOUCH) + qdel(src) /obj/item/weapon/reagent_containers/food/snacks/pie/berryclafoutis diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 8fe33dc7e58..2cfcf77413e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -806,17 +806,16 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice() bitesize = 1 + round(reagents.total_volume / 2, 1) /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/proc/squish(atom/target) - new splat(src.loc) - src.visible_message("The [src.name] has been squashed.","You hear a smack.") + var/turf/T = get_turf(target) + new splat(T) + visible_message("The [src.name] has been squashed.","You hear a smack.") for(var/atom/A in get_turf(target)) - src.reagents.reaction(A) + reagents.reaction(A) /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/throw_impact(atom/hit_atom) - ..() - squish(hit_atom) - del(src) // Not qdel, because it'll hit other mobs then the floor for runtimes. - return - + if(!..()) //was it caught by a mob? + squish(hit_atom) + qdel(src) /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer seed = /obj/item/seeds/killertomatoseed @@ -906,7 +905,8 @@ obj/item/weapon/reagent_containers/food/snacks/grown/shell/eggy/add_juice() ..() var/teleport_radius = potency / 10 if(isliving(squishee)) - new /obj/effect/decal/cleanable/molten_item(squishee.loc) //Leave a pile of goo behind for dramatic effect... + var/turf/T = get_turf(squishee) + new /obj/effect/decal/cleanable/molten_item(T) //Leave a pile of goo behind for dramatic effect... do_teleport(squishee, get_turf(squishee), teleport_radius) diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index 51e086ae669..e217683f129 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/hitby(atom/movable/AM) - ..(AM, 1) +/mob/living/carbon/alien/hitby(atom/movable/AM, mob/thrower) + ..(AM, thrower, skip = 1) /*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other. diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index a34c6337786..e27983fd18d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -82,11 +82,11 @@ else //Maybe uses plasma in the future, although that wouldn't make any sense... leaping = 1 update_icons() - throw_at(A,MAX_ALIEN_LEAP_DIST,1) + throw_at(A,MAX_ALIEN_LEAP_DIST,1, spin=0) leaping = 0 update_icons() -/mob/living/carbon/alien/humanoid/hunter/throw_impact(A) +/mob/living/carbon/alien/humanoid/hunter/throw_impact(atom/A) if(!leaping) return ..() @@ -103,60 +103,21 @@ pounce_cooldown = !pounce_cooldown spawn(pounce_cooldown_time) //3s by default pounce_cooldown = !pounce_cooldown - else + else if(A.density && !A.CanPass(src)) visible_message("[src] smashes into [A]!", "[src] smashes into [A]!") weakened = 2 if(leaping) leaping = 0 + update_icons() update_canmove() + /mob/living/carbon/alien/humanoid/float(on) if(leaping) return ..() -//Modified throw_at() that will use diagonal dirs where appropriate -//instead of locking it to cardinal dirs -/mob/living/carbon/alien/humanoid/throw_at(atom/target, range, speed) - if(!target || !src || (flags & NODROP)) return 0 - - src.throwing = 1 - - var/dist_x = abs(target.x - src.x) - var/dist_y = abs(target.y - src.y) - var/dist_travelled = 0 - var/dist_since_sleep = 0 - - var/tdist_x = dist_x; - var/tdist_y = dist_y; - - if(dist_x <= dist_y) - tdist_x = dist_y; - tdist_y = dist_x; - - var/error = tdist_x/2 - tdist_y - while(target && (((((dist_x > dist_y) && ((src.x < target.x) || (src.x > target.x))) || ((dist_x <= dist_y) && ((src.y < target.y) || (src.y > target.y))) || (src.x > target.x)) && dist_travelled < range) || !has_gravity(src))) - - if(!src.throwing) break - if(!istype(src.loc, /turf)) break - - var/atom/step = get_step(src, get_dir(src,target)) - if(!step) - break - src.Move(step, get_dir(src, step)) - hit_check() - error += (error < 0) ? tdist_x : -tdist_y; - dist_travelled++ - dist_since_sleep++ - if(dist_since_sleep >= speed) - dist_since_sleep = 0 - sleep(1) - - - src.throwing = 0 - - return 1 diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 65cdef581b1..24f9192cca3 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/hitby(atom/movable/AM, skip) +/mob/living/carbon/hitby(atom/movable/AM, mob/thrower, skip) if(!skip) //ugly, but easy if(in_throw_mode && !get_active_hand()) //empty active hand and we're in throw mode if(canmove && !restrained()) @@ -8,8 +8,8 @@ put_in_active_hand(I) visible_message("[src] catches [I]!") throw_mode_off() - return - ..() + return 1 + return ..() /mob/living/carbon/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7feb6af38b3..f1fa58c8509 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -455,4 +455,18 @@ emp_act else ..() - return +/mob/living/carbon/human/hitby(atom/movable/AM, mob/thrower) + if(throw_speed >= EMBED_THROWSPEED_THRESHOLD) + if(istype(AM, /obj/item)) + var/obj/item/I = AM + if(can_embed(I)) + if(prob(I.embed_chance) && !(dna && (PIERCEIMMUNE in dna.species.specflags))) + throw_alert("embeddedobject") + var/obj/item/organ/limb/L = pick(organs) + L.embedded_objects |= I + I.add_blood(src)//it embedded itself in you, of course it's bloody! + I.loc = src + L.take_damage(I.w_class*I.embedded_impact_pain_multiplier) + visible_message("\the [I.name] embeds itself in [src]'s [L.getDisplayName()]!","\the [I.name] embeds itself in your [L.getDisplayName()]!") + return + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 5dc30d5535a..113306f12e2 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -45,7 +45,7 @@ return shoes && shoes.negates_gravity() /mob/living/carbon/human/Move(NewLoc, direct) - ..() + . = ..() if(dna) for(var/datum/mutation/human/HM in dna.mutations) HM.on_move(src, NewLoc) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 48b78d3fb65..4e47819cd1a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -52,13 +52,14 @@ Sorry Giacom. Please don't be mad :( //Generic Bump(). Override MobBump() and ObjBump() instead of this. /mob/living/Bump(atom/A, yes) + if(..()) //bumped by a thrown /atom/movable + return if (buckled || !yes || now_pushing) return if(ismob(A)) var/mob/M = A if(MobBump(M)) return - ..() if(isobj(A)) var/obj/O = A if(ObjBump(O)) @@ -68,6 +69,10 @@ Sorry Giacom. Please don't be mad :( if(PushAM(AM)) return +/mob/living/Bumped(atom/movable/AM) + ..() + last_bumped = world.time + //Called when we bump onto a mob /mob/living/proc/MobBump(mob/M) //Even if we don't push/swap places, we "touched" them, so spread fire diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index d050141cd8d..05711d54ae1 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -44,7 +44,13 @@ else return 0 -/mob/living/hitby(atom/movable/AM,mob/thrower)//Standardization and logging -Sieve +/mob/living/throw_impact(atom/hit_atom, mob/thrower) + . = ..() + if(hit_atom.density) + Weaken(1) + take_organ_damage(10) + +/mob/living/hitby(atom/movable/AM, mob/thrower) if(istype(AM, /obj/item)) var/obj/item/I = AM var/zone = ran_zone("chest", 65)//Hits a random part of the body, geared towards the chest @@ -71,9 +77,11 @@ "[src] has been hit by [I].") var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) apply_damage(I.throwforce, dtype, zone, armor, I) - - if(thrower) - add_logs(thrower, src, "hit", object="[I]") + else + playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) + if(thrower) + add_logs(thrower, src, "hit", object="[AM]") + return ..() /mob/living/mech_melee_attack(obj/mecha/M) if(M.occupant.a_intent == "harm") diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index b48f2f21e14..e0247e1d3cd 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -45,4 +45,6 @@ var/list/pipes_shown = list() var/last_played_vent - var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. \ No newline at end of file + var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. + + var/last_bumped = 0 \ No newline at end of file diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index f80afc9d4f8..5d992c37117 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -1,18 +1,16 @@ /mob/CanPass(atom/movable/mover, turf/target, height=0) - if(height==0) return 1 - - if(istype(mover) && mover.checkpass(PASSMOB)) + if(height==0) return 1 - if(istype(mover, /obj/item/projectile)) + if(istype(mover, /obj/item/projectile) || mover.throwing) return (!density || lying) + if(mover.checkpass(PASSMOB)) + return 1 if(ismob(mover)) var/mob/moving_mob = mover if ((other_mobs && moving_mob.other_mobs)) return 1 - return (!mover.density || !density || lying) - else - return (!mover.density || !density || lying) - return + return (!mover.density || !density || lying) + /client/Northeast() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index ad420ffc5e6..33182087e98 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -43,7 +43,7 @@ /obj/machinery/field/containment/Crossed(obj/mover as obj) if(istype(mover, /obj/machinery) || istype(mover, /obj/structure) || istype(mover, /obj/mecha)) - bump(mover) + bump_field(mover) /obj/machinery/field/containment/proc/set_master(var/master1,var/master2) if(!master1 || !master2) @@ -77,7 +77,7 @@ if((istype(mover, /obj/machinery) && !istype(mover, /obj/singularity)) || \ istype(mover, /obj/structure) || \ istype(mover, /obj/mecha)) - bump(mover) + bump_field(mover) return 0 return ..() @@ -106,13 +106,13 @@ "You hear an electrical crack.") user.updatehealth() - bump(user) + bump_field(user) spawn(5) hasShocked = 0 return -/obj/machinery/field/proc/bump(atom/movable/AM as mob|obj) +/obj/machinery/field/proc/bump_field(atom/movable/AM as mob|obj) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, AM.loc) s.start() diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 07943676729..45c4a3c4727 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -356,6 +356,6 @@ field_generator power level display if(fields.len) ..() -/obj/machinery/field/generator/bump(atom/movable/AM as mob|obj) +/obj/machinery/field/generator/bump_field(atom/movable/AM as mob|obj) if(fields.len) ..() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 90c60fc5769..44e06e7d5c2 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -26,7 +26,7 @@ var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six - allow_spin = 0 + /obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) //CARN: admin-alert for chuckle-fuckery. admin_investigate_setup() diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 8fc1a4622f9..e55eea65f05 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -92,7 +92,7 @@ return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume /obj/item/projectile/Bump(atom/A, yes) - if(!yes) //prevents multi bumps. + if(!yes) //prevents double bumps. return if(A == firer || A == src) loc = A.loc diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 6037ebf02d8..c4c24929e39 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -80,7 +80,7 @@ ..() /obj/item/weapon/reagent_containers/throw_impact(atom/target,mob/thrower) - ..() + . = ..() if(!reagents.total_volume || !spillable) return @@ -100,7 +100,7 @@ add_logs(thrower, M, "splashed", object="[R]") reagents.reaction(target, TOUCH) - else if((!target.density || target.throwpass) && thrower && thrower.mind && thrower.mind.assigned_role == "Bartender") + else if((target.CanPass(src, get_turf(src))) && thrower && thrower.mind && thrower.mind.assigned_role == "Bartender") visible_message("[src] lands onto the [target.name] without spilling a single drop.") return diff --git a/code/modules/telesci/bscrystal.dm b/code/modules/telesci/bscrystal.dm index 74b9807dade..53eba66a1b1 100644 --- a/code/modules/telesci/bscrystal.dm +++ b/code/modules/telesci/bscrystal.dm @@ -28,13 +28,14 @@ do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg') /obj/item/bluespace_crystal/throw_impact(atom/hit_atom) - ..() - visible_message("[src] fizzles and disappears upon impact!") - PoolOrNew(/obj/effect/effect/sparks, loc) - playsound(src.loc, "sparks", 50, 1) - if(isliving(hit_atom)) - blink_mob(hit_atom) - qdel(src) + if(!..()) // not caught in mid-air + visible_message("[src] fizzles and disappears upon impact!") + var/turf/T = get_turf(hit_atom) + PoolOrNew(/obj/effect/effect/sparks, T) + playsound(src.loc, "sparks", 50, 1) + if(isliving(hit_atom)) + blink_mob(hit_atom) + qdel(src) // Artifical bluespace crystal, doesn't give you much research. diff --git a/html/changelogs/phil235-CatchThrownPieFix.yml b/html/changelogs/phil235-CatchThrownPieFix.yml new file mode 100644 index 00000000000..8b8f21081c2 --- /dev/null +++ b/html/changelogs/phil235-CatchThrownPieFix.yml @@ -0,0 +1,8 @@ + +author: phil235 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +changes: + - tweak: "Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed. From 6f09fb767288d8d20182d91e0f018d521766f8b3 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Tue, 14 Jul 2015 23:19:56 -0400 Subject: [PATCH 12/65] Big cleanup --- code/game/machinery/doors/firedoor.dm | 37 +++++++++++++-------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 817b876b1c8..f50da4866b1 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -20,7 +20,6 @@ var/nextstate = null sub_door = 1 closingLayer = 3.11 - var/panelOpen = 0 /obj/machinery/door/firedoor/Bumped(atom/AM) if(p_open || operating) return @@ -49,11 +48,11 @@ update_icon() return - if(istype(C, /obj/item/weapon/wrench) && panelOpen) + if(istype(C, /obj/item/weapon/wrench) && panel_open) playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) user.visible_message("[user] starts undoing [src]'s bolts...", \ "You start unfastening [src]'s floor bolts...") - if(!do_after(user, 50)) return + if(!do_after(user, 50, target = src)) return playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] unfastens [src]'s bolts.", \ "You undo [src]'s floor bolts.") @@ -75,14 +74,7 @@ return if(istype(C, /obj/item/weapon/screwdriver)) - panelOpen = !panelOpen - if(panelOpen) - user.visible_message("[user] opens [src]'s maintenance panel.", \ - "You unscrew [src]'s maintenance panel.") - else - user.visible_message("[user] closes [src]'s maintenance panel.", \ - "You close [src]'s maintenance panel.") - playsound(get_turf(src), 'sound/items/Screwdriver.ogg', 50, 1) + default_deconstruction_screwdriver(user, icon_state, icon_state, C) return return @@ -217,7 +209,8 @@ playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) user.visible_message("[user] starts prying something out from [src]...", \ "You begin prying out the wire cover...") - if(!do_after(user, 50)) return + if(!do_after(user, 50, target = src)) return + if(constructionStep != CONSTRUCTION_PANEL_OPEN) return playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] pries out a metal plate from [src], exposing the wires.", \ "You remove the cover plate from [src], exposing the wires.") @@ -228,7 +221,7 @@ playsound(get_turf(src), 'sound/items/Ratchet.ogg', 50, 1) user.visible_message("[user] starts bolting down [src]...", \ "You begin bolting [src]...") - if(!do_after(user, 30)) return + if(!do_after(user, 30, target = src)) return user.visible_message("[user] finishes the firelock.", \ "You finish the firelock.") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) @@ -243,7 +236,8 @@ playsound(get_turf(src), 'sound/items/Wirecutter.ogg', 50, 1) user.visible_message("[user] starts cutting the wires from [src]...", \ "You begin removing [src]'s wires...") - if(!do_after(user, 60)) return + if(!do_after(user, 60, target = src)) return + if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return user.visible_message("[user] removes the wires from [src].", \ "You remove the wiring from [src], exposing the circuit board.") var/obj/item/stack/cable_coil/B = new(get_turf(src)) @@ -257,7 +251,8 @@ playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) user.visible_message("[user] starts welding a metal plate into [src]...", \ "You begin welding the cover plate back onto [src]...") - if(!do_after(user, 80)) return + if(!do_after(user, 80, target = src)) return + if(constructionStep != CONSTRUCTION_WIRES_EXPOSED) return playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) user.visible_message("[user] welds the metal plate into [src].", \ "You weld [src]'s cover plate into place, hiding the wires.") @@ -269,7 +264,8 @@ user.visible_message("[user] begins removing the circuit board from [src]...", \ "You begin prying out the circuit board from [src]...") playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - if(!do_after(user, 50)) return + if(!do_after(user, 50, target = src)) return + if(constructionStep != CONSTRUCTION_GUTTED) return user.visible_message("[user] removes [src]'s circuit board.", \ "You remove the circuit board from [src].") new /obj/item/weapon/firelock_board(get_turf(src)) @@ -285,7 +281,8 @@ user.visible_message("[user] begins wiring [src]...", \ "You begin adding wires to [src]...") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 60)) return + if(!do_after(user, 60, target = src)) return + if(constructionStep != CONSTRUCTION_GUTTED) return user.visible_message("[user] adds wires to [src].", \ "You wire [src].") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) @@ -300,7 +297,8 @@ playsound(get_turf(src), 'sound/items/Welder.ogg', 50, 1) user.visible_message("[user] begins cutting apart [src]'s frame...", \ "You begin slicing [src] apart...") - if(!do_after(user, 80)) return + if(!do_after(user, 80, target = src)) return + if(constructionStep != CONSTRUCTION_NOCIRCUIT) return user.visible_message("[user] cuts apart [src]!", \ "You cut [src] into metal.") playsound(get_turf(src), 'sound/items/Welder2.ogg', 50, 1) @@ -312,7 +310,8 @@ user.visible_message("[user] starts adding [C] to [src]...", \ "You begin adding a circuit board to [src]...") playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 40)) return + if(!do_after(user, 40, target = src)) return + if(constructionStep != CONSTRUCTION_NOCIRCUIT) return user.drop_item() qdel(C) user.visible_message("[user] adds a circuit to [src].", \ From 4207de5159dbbbdb520117e12f369680ae9874ac Mon Sep 17 00:00:00 2001 From: Xhuis Date: Tue, 14 Jul 2015 23:22:23 -0400 Subject: [PATCH 13/65] Fixes a typo --- code/modules/research/designs/autolathe_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 37cd8f0c0ec..5a68e76e7e2 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -107,7 +107,7 @@ category = list("initial", "Electronics") /datum/design/apc_board - name = "APC m odule" + name = "APC module" id = "power control" build_type = AUTOLATHE materials = list(MAT_METAL = 100, MAT_GLASS = 100) From 5ea4db5b9243ab44f5d7fb93b2b4de11c71776db Mon Sep 17 00:00:00 2001 From: Xhuis Date: Tue, 14 Jul 2015 23:22:46 -0400 Subject: [PATCH 14/65] Fixes another typo... --- html/changelogs/Xhuis-Firelocks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/changelogs/Xhuis-Firelocks.yml b/html/changelogs/Xhuis-Firelocks.yml index 12116c1ed1c..935c6ce0085 100644 --- a/html/changelogs/Xhuis-Firelocks.yml +++ b/html/changelogs/Xhuis-Firelocks.yml @@ -1,4 +1,4 @@ -author: Dorsidwarf +author: Xhuis delete-after: True changes: From 9c0ef0c2ce984695485232b1926d651c3df93d60 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Wed, 15 Jul 2015 19:06:48 +1000 Subject: [PATCH 15/65] overlays for energy guns --- code/modules/projectiles/ammunition/energy.dm | 7 +- code/modules/projectiles/gun.dm | 5 ++ code/modules/projectiles/guns/energy.dm | 33 ++++---- code/modules/projectiles/guns/energy/laser.dm | 7 ++ .../projectiles/guns/energy/nuclear.dm | 76 +++++------------ code/modules/projectiles/guns/energy/pulse.dm | 2 + .../projectiles/guns/energy/special.dm | 79 +++++++++--------- code/modules/projectiles/guns/energy/stun.dm | 44 +++++++++- .../projectiles/guns/energy/temperature.dm | 14 ---- icons/obj/guns/energy.dmi | Bin 41039 -> 25632 bytes tgstation.dme | 1 - 11 files changed, 137 insertions(+), 131 deletions(-) delete mode 100644 code/modules/projectiles/guns/energy/temperature.dm diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index ae4f0f5c7b4..0a89745dfcf 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -5,7 +5,6 @@ projectile_type = /obj/item/projectile/energy var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. var/select_name = "energy" - var/mod_name = null fire_sound = 'sound/weapons/Laser.ogg' /obj/item/ammo_casing/energy/laser @@ -87,13 +86,11 @@ /obj/item/ammo_casing/energy/flora/yield projectile_type = /obj/item/projectile/energy/florayield - select_name = "increase yield" - mod_name = "yield" + select_name = "yield" /obj/item/ammo_casing/energy/flora/mut projectile_type = /obj/item/projectile/energy/floramut - select_name = "induce mutations" - mod_name = "mut" + select_name = "mutation" /obj/item/ammo_casing/energy/temp projectile_type = /obj/item/projectile/temp diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b688248a352..74ca931b25e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -49,6 +49,11 @@ var/list/upgrades = list() + var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite + var/ammo_y_offset = 0 + var/flight_x_offset = 0 + var/flight_y_offset = 0 + /obj/item/weapon/gun/New() ..() if(pin) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b16bfeb140f..caa7248dc90 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -10,6 +10,7 @@ var/list/ammo_type = list(/obj/item/ammo_casing/energy) var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next. var/can_charge = 1 //Can it be charged in a recharger? + ammo_x_offset = 2 /obj/item/weapon/gun/energy/emp_act(severity) power_supply.use(round(power_supply.charge / severity)) @@ -72,25 +73,25 @@ return /obj/item/weapon/gun/energy/update_icon() - var/ratio = power_supply.charge / power_supply.maxcharge - ratio = min(Ceiling(ratio*4) * 25, 100) - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - if(power_supply.charge < shot.e_cost) - ratio = 0 //so the icon changes to empty if the charge isn't zero but not enough for a shot. - switch(modifystate) - if (0) - icon_state = "[initial(icon_state)][ratio]" - if (1) - icon_state = "[initial(icon_state)][shot.mod_name][ratio]" - if (2) - icon_state = "[initial(icon_state)][shot.select_name][ratio]" overlays.Cut() + var/ratio = Ceiling((power_supply.charge / power_supply.maxcharge) * 4) + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + var/iconState = "[icon_state]_charge" + item_state = icon_state + if (modifystate) + overlays += "[icon_state]_[shot.select_name]" + iconState += "_[shot.select_name]" + item_state += "[shot.select_name]" + if(power_supply.charge < shot.e_cost) + overlays += "[icon_state]_empty" + ratio = 0 + for(var/i = ratio, i >= 1, i--) + overlays += image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1)) if(F) + var/iconF = "flight" if(F.on) - overlays += "flight-[initial(icon_state)]-on" - else - overlays += "flight-[initial(icon_state)]" - return + iconF = "flight_on" + overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) /obj/item/weapon/gun/energy/ui_action_click() toggle_gunlight() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index b04057fb82b..a3312bbe75e 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -7,6 +7,7 @@ materials = list(MAT_METAL=2000) origin_tech = "combat=3;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/lasergun) + ammo_x_offset = 1 /obj/item/weapon/gun/energy/laser/practice @@ -20,6 +21,7 @@ name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's private security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." + ammo_x_offset = 3 /obj/item/weapon/gun/energy/laser/captain @@ -29,6 +31,7 @@ force = 10 origin_tech = null var/charge_tick = 0 + ammo_x_offset = 3 /obj/item/weapon/gun/energy/laser/captain/New() ..() @@ -87,6 +90,7 @@ origin_tech = "combat=4;materials=3;powerstorage=3" ammo_type = list(/obj/item/ammo_casing/energy/laser/heavy) pin = null + ammo_x_offset = 3 /obj/item/weapon/gun/energy/xray name = "xray laser gun" @@ -96,6 +100,7 @@ origin_tech = "combat=5;materials=3;magnets=2;syndicate=2" ammo_type = list(/obj/item/ammo_casing/energy/xray) pin = null + ammo_x_offset = 3 ////////Laser Tag//////////////////// @@ -109,6 +114,7 @@ needs_permit = 0 var/charge_tick = 0 pin = /obj/item/device/firing_pin/tag/blue + ammo_x_offset = 2 /obj/item/weapon/gun/energy/laser/bluetag/New() ..() @@ -140,6 +146,7 @@ needs_permit = 0 var/charge_tick = 0 pin = /obj/item/device/firing_pin/tag/red + ammo_x_offset = 2 /obj/item/weapon/gun/energy/laser/redtag/New() ..() diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 6de08880434..e0e634cdc8a 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -7,6 +7,9 @@ origin_tech = "combat=3;magnets=2" modifystate = 2 can_flashlight = 1 + ammo_x_offset = 3 + flight_x_offset = 15 + flight_y_offset = 10 /obj/item/weapon/gun/energy/gun/attack_self(mob/living/user as mob) select_fire(user) @@ -27,18 +30,31 @@ origin_tech = "combat=3;magnets=3;materials=4; bluespace=4" ammo_type = list(/obj/item/ammo_casing/energy/net, /obj/item/ammo_casing/energy/trap) can_flashlight = 0 + ammo_x_offset = 1 + +/obj/item/weapon/gun/energy/gun/turret + name = "hybrid turret gun" + desc = "A heavy hybrid energy cannon with two settings: Stun and kill." + icon_state = "turretlaser" + slot_flags = null + w_class = 5 + ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) + heavy_weapon = 1 + can_flashlight = 0 + trigger_guard = 0 + ammo_x_offset = 2 /obj/item/weapon/gun/energy/gun/nuclear name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell." icon_state = "nucgun" origin_tech = "combat=3;materials=5;powerstorage=3" - var/lightfail = 0 + var/fail_state = 0 var/charge_tick = 0 - modifystate = 0 can_flashlight = 0 pin = null can_charge = 0 + ammo_x_offset = 1 /obj/item/weapon/gun/energy/gun/nuclear/New() ..() @@ -63,7 +79,7 @@ /obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck() - lightfail = 0 + fail_state = 0 if (prob(src.reliability)) return 1 //No failure if (prob(src.reliability)) for (var/mob/living/M in range(0,src)) //Only a minor failure, enjoy your radiation if you're in the same tile or carrying it @@ -72,68 +88,22 @@ else M << "You feel a warm sensation." M.irradiate(rand(3,120)) - lightfail = 1 + fail_state = 1 else for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES if (src in M.contents) M << "Your gun's reactor overloads!" M << "You feel a wave of heat wash over you." M.irradiate(300) - crit_fail = 1 //break the gun so it stops recharging + fail_state = 2 //break the gun so it stops recharging SSobj.processing.Remove(src) update_icon() return 0 - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge() - if (crit_fail) - overlays += "nucgun-whee" - return - var/ratio = power_supply.charge / power_supply.maxcharge - ratio = Ceiling(ratio*4) * 25 - overlays += "nucgun-[ratio]" - - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor() - if(crit_fail) - overlays += "nucgun-crit" - return - if(lightfail) - overlays += "nucgun-medium" - else if ((power_supply.charge/power_supply.maxcharge) <= 0.5) - overlays += "nucgun-light" - else - overlays += "nucgun-clean" - - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_mode() - if (select == 1) - overlays += "nucgun-stun" - else if (select == 2) - overlays += "nucgun-kill" - - /obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity) ..() reliability -= round(15/severity) - /obj/item/weapon/gun/energy/gun/nuclear/update_icon() - overlays.Cut() - update_charge() - update_reactor() - update_mode() - -/obj/item/weapon/gun/energy/gun/turret - name = "hybrid turret gun" - desc = "A heavy hybrid energy cannon with two settings: Stun and kill." - icon_state = "turretlaser" - slot_flags = null - w_class = 5 - ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) - heavy_weapon = 1 - can_flashlight = 0 - trigger_guard = 0 - -/obj/item/weapon/gun/energy/gun/turret/update_icon() - icon_state = initial(icon_state) \ No newline at end of file + ..() + overlays += "[icon_state]_fail_[fail_state]" \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index d638e39a10b..7f878222b7e 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -28,6 +28,8 @@ item_state = "pulse" cell_type = "/obj/item/weapon/stock_parts/cell/pulse/carbine" can_flashlight = 1 + flight_x_offset = 18 + flight_y_offset = 12 /obj/item/weapon/gun/energy/pulse/carbine/loyalpin pin = /obj/item/device/firing_pin/implant/loyalty diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index c3c78b2010c..25878384fa3 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -9,7 +9,9 @@ flags = CONDUCT slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) - + ammo_x_offset = 3 + flight_x_offset = 17 + flight_y_offset = 9 /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) return @@ -23,6 +25,9 @@ w_class = 3 slot_flags = SLOT_BELT pin = null + ammo_x_offset = 2 + flight_x_offset = 18 + flight_y_offset = 11 /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" @@ -31,6 +36,13 @@ origin_tech = "combat=5;materials=4;powerstorage=3" ammo_type = list(/obj/item/ammo_casing/energy/declone) pin = null + ammo_x_offset = 1 + +/obj/item/weapon/gun/energy/decloner/update_icon() + ..() + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + if(power_supply.charge > shot.e_cost) + overlays += "decloner_spin" /obj/item/weapon/gun/energy/floragun name = "floral somatoray" @@ -41,7 +53,6 @@ origin_tech = "materials=2;biotech=3;powerstorage=3" modifystate = 1 var/charge_tick = 0 - var/mode = 0 //0 = mutate, 1 = yield boost /obj/item/weapon/gun/energy/floragun/New() ..() @@ -115,6 +126,7 @@ desc = "A prototype weapon recovered from the ruins of Research-Station Epsilon." icon_state = "xray" ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) + ammo_x_offset = 2 /obj/item/weapon/gun/energy/kinetic_accelerator name = "proto-kinetic accelerator" @@ -151,6 +163,13 @@ update_icon() return +/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + if(power_supply.charge < shot.e_cost) + icon_state = "[initial(icon_state)]_empty" + else + icon_state = initial(icon_state) + /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow name = "mini energy crossbow" desc = "A weapon favored by syndicate stealth specialists." @@ -205,51 +224,15 @@ else ..() +/obj/item/weapon/gun/energy/plasmacutter/update_icon() + return + /obj/item/weapon/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" origin_tech = "combat=3;materials=4;magnets=3;plasmatech=3;engineering=2" ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv) -/obj/item/weapon/gun/energy/disabler - name = "disabler" - desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse." - icon_state = "disabler" - item_state = null - ammo_type = list(/obj/item/ammo_casing/energy/disabler) - -/obj/item/weapon/gun/energy/disabler/cyborg - name = "cyborg disabler" - desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating." - var/charge_tick = 0 - var/recharge_time = 2.5 - can_charge = 0 - -/obj/item/weapon/gun/energy/disabler/cyborg/New() - ..() - SSobj.processing |= src - - -/obj/item/weapon/gun/energy/disabler/cyborg/Destroy() - SSobj.processing.Remove(src) - ..() - -/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg - charge_tick++ - if(charge_tick < recharge_time) return 0 - charge_tick = 0 - - if(!power_supply) return 0 //sanity - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - if(R && R.cell) - var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot - if(R.cell.use(shot.e_cost)) //Take power from the borg... - power_supply.give(shot.e_cost) //... to recharge the shot - - update_icon() - return 1 - /obj/item/weapon/gun/energy/wormhole_projector name = "bluespace wormhole projector" desc = "A projector that emits high density quantum-coupled bluespace beams." @@ -333,3 +316,17 @@ power_supply.give(shot.e_cost) //...to recharge the shot return 1 + +/obj/item/weapon/gun/energy/temperature + name = "temperature gun" + icon_state = "freezegun" + desc = "A gun that changes temperatures." + origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2" + ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) + cell_type = "/obj/item/weapon/stock_parts/cell/high" + pin = null + +/obj/item/weapon/gun/energy/temperature/attack_self(mob/living/user as mob) + select_fire(user) + update_icon() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 413dff9ad14..db23c7489b7 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -1,10 +1,10 @@ - /obj/item/weapon/gun/energy/taser name = "taser gun" desc = "A low-capacity, energy-based stun gun used by security teams to subdue targets at range." icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. ammo_type = list(/obj/item/ammo_casing/energy/electrode) + ammo_x_offset = 3 /obj/item/weapon/gun/energy/stunrevolver name = "stun revolver" @@ -13,6 +13,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode/gun) can_flashlight = 0 pin = null + ammo_x_offset = 1 /obj/item/weapon/gun/energy/gun/advtaser name = "hybrid taser" @@ -20,6 +21,7 @@ icon_state = "advtaser" ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler) origin_tech = null + ammo_x_offset = 2 /obj/item/weapon/gun/energy/gun/advtaser/cyborg name = "cyborg taser" @@ -52,3 +54,43 @@ update_icon() return 1 + +/obj/item/weapon/gun/energy/disabler + name = "disabler" + desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse." + icon_state = "disabler" + item_state = null + ammo_type = list(/obj/item/ammo_casing/energy/disabler) + ammo_x_offset = 3 + +/obj/item/weapon/gun/energy/disabler/cyborg + name = "cyborg disabler" + desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating." + var/charge_tick = 0 + var/recharge_time = 2.5 + can_charge = 0 + +/obj/item/weapon/gun/energy/disabler/cyborg/New() + ..() + SSobj.processing |= src + + +/obj/item/weapon/gun/energy/disabler/cyborg/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg + charge_tick++ + if(charge_tick < recharge_time) return 0 + charge_tick = 0 + + if(!power_supply) return 0 //sanity + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + if(R && R.cell) + var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot + if(R.cell.use(shot.e_cost)) //Take power from the borg... + power_supply.give(shot.e_cost) //... to recharge the shot + + update_icon() + return 1 \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm deleted file mode 100644 index 0db80cb561e..00000000000 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/weapon/gun/energy/temperature - name = "temperature gun" - icon_state = "freezegun" - desc = "A gun that changes temperatures." - origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2" - ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) - cell_type = "/obj/item/weapon/stock_parts/cell/high" - pin = null - - -/obj/item/weapon/gun/energy/temperature/attack_self(mob/living/user as mob) - select_fire(user) - update_icon() - return \ No newline at end of file diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 09fa557ac1a2dddf15e23bb49a2b6102a30fc5ee..fd32b8b6077fd44198c9c61b8a023f0341d63bd8 100644 GIT binary patch literal 25632 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 Date: Wed, 15 Jul 2015 06:28:16 -0700 Subject: [PATCH 16/65] Changes up the Bulldog Bioterror Dart --- code/modules/projectiles/ammunition/ammo_casings.dm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 3e0afd3ee2e..c14b8ea8832 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -174,12 +174,11 @@ /obj/item/ammo_casing/shotgun/dart/bioterror/New() ..() - reagents.add_reagent("neurotoxin", 5) - reagents.add_reagent("morphine", 5) - reagents.add_reagent("spore", 5) - reagents.add_reagent("mutetoxin", 5) //;HELP OPS IN MAINT - reagents.add_reagent("initropidril", 5) - reagents.add_reagent("sodium_thiopental", 5) + reagents.add_reagent("neurotoxin", 6) + reagents.add_reagent("spore", 6) + reagents.add_reagent("mutetoxin", 6) //;HELP OPS IN MAINT + reagents.add_reagent("coniine", 6) + reagents.add_reagent("sodium_thiopental", 6) /obj/item/ammo_casing/a762 desc = "A 7.62mm bullet casing." From f05c394c3c8f542316e9b1aaee9474dd7a99fbce Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 21:35:02 +0200 Subject: [PATCH 17/65] Fixes airlock not closing super fast when timing wire is pulsed or disabled by AI. When the door safety is off, the door will not automatically reopen when it detects a mob on its tile. --- code/game/machinery/doors/airlock.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b1a3acba501..9c337abafae 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1096,7 +1096,7 @@ About the new airlock wires panel: spawn(150) autoclose() else if(autoclose && !normalspeed) - spawn(5) + spawn(11) autoclose() return ..() @@ -1148,8 +1148,9 @@ About the new airlock wires panel: operating = 0 air_update_turf(1) update_freelook_sight() - if(locate(/mob/living) in get_turf(src)) - open() + if(safe) + if(locate(/mob/living) in get_turf(src)) + open() return 1 /obj/machinery/door/airlock/New() From bb0938a927cc6a792a26d6f39c64958bb7ec21b1 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Wed, 15 Jul 2015 22:42:24 -0600 Subject: [PATCH 18/65] Fixes borged revheads not getting deconverted when borged Fixes #10646 --- code/game/gamemodes/revolution/revolution.dm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 58d915a0559..36b8af54902 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -244,14 +244,19 @@ //Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph. ////////////////////////////////////////////////////////////////////////////// /datum/game_mode/proc/remove_revolutionary(datum/mind/rev_mind , beingborged) - if(rev_mind in revolutionaries) + var/remove_head = 0 + if(beingborged && (rev_mind in head_revolutionaries)) + head_revolutionaries -= rev_mind + remove_head = 1 + + if((rev_mind in revolutionaries) || remove_head) revolutionaries -= rev_mind rev_mind.special_role = null rev_mind.current.attack_log += "\[[time_stamp()]\] Has renounced the revolution!" if(beingborged) - rev_mind.current << "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you." - message_admins("[key_name_admin(rev_mind.current)] ? (FLW) has been borged while being a member of the revolution.") + rev_mind.current << "The frame's firmware detects and deletes your neural reprogramming! You remember nothing[remove_head ? "." : " but the name of the one who flashed you."]" + message_admins("[key_name_admin(rev_mind.current)] ? (FLW) has been borged while being a [remove_head ? "leader" : " member"] of the revolution.") else rev_mind.current.Paralyse(5) From 2693a44a80272bc82c0bfa7579fface2dbd181ac Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 12 Jul 2015 20:42:18 +0200 Subject: [PATCH 19/65] Buffs Lightning Bolt --- code/__HELPERS/unsorted.dm | 4 ++-- code/datums/spells/lightning.dm | 38 ++++++++++++------------------- code/modules/mob/living/living.dm | 2 +- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 2a223184ccf..32b70c13cd1 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -674,7 +674,7 @@ Turf and target are seperate in case you want to teleport some distance from a t else return get_step(ref, base_dir) -/proc/do_mob(mob/user , mob/target, time = 30, numticks = 5, stealth = 0) //This is quite an ugly solution but i refuse to use the old request system. +/proc/do_mob(mob/user , mob/target, time = 30, numticks = 5, uninterruptible = 0) //This is quite an ugly solution but i refuse to use the old request system. if(!user || !target) return 0 if(numticks == 0) @@ -693,7 +693,7 @@ Turf and target are seperate in case you want to teleport some distance from a t if(user && user.client) user.client.images -= progbar return 0 - if ( user.loc != user_loc || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying ) + if (!uninterruptible && (user.loc != user_loc || target.loc != target_loc || user.get_active_hand() != holding || user.incapacitated() || user.lying )) if(user && user.client) user.client.images -= progbar return 0 diff --git a/code/datums/spells/lightning.dm b/code/datums/spells/lightning.dm index 54d0a3378b7..3fbefee6c16 100644 --- a/code/datums/spells/lightning.dm +++ b/code/datums/spells/lightning.dm @@ -10,7 +10,7 @@ cooldown_min = 30 selection_type = "view" random_target = 1 - var/energy = 0 + var/start_time = 0 var/ready = 0 var/image/halo = null var/sound/Snd // so far only way i can think of to stop a sound, thank MSO for the idea. @@ -18,7 +18,7 @@ action_icon_state = "lightning" /obj/effect/proc_holder/spell/targeted/lightning/Click() - if(!ready && energy==0) + if(!ready && start_time==0) if(cast_check()) StartChargeup() else @@ -33,16 +33,14 @@ halo = image("icon"='icons/effects/effects.dmi',"icon_state" ="electricity","layer" = EFFECTS_LAYER) user.overlays.Add(halo) playsound(get_turf(usr), Snd, 50, 0) - spawn(0) - while(ready) - energy++ - if(energy >= 100 && ready) - Discharge() - sleep(1) + start_time = world.time + if(do_mob(user,user,100,uninterruptible=1)) + if(ready) + Discharge() /obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr) ready = 0 - energy = 0 + start_time = 0 if(halo) user.overlays.Remove(halo) @@ -72,26 +70,18 @@ playsound(get_turf(usr), 'sound/magic/lightningbolt.ogg', 50, 1) user.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) - switch(energy) - if(1 to 25) - target.electrocute_act(10,"Lightning Bolt") - playsound(get_turf(target), 'sound/magic/LightningShock.ogg', 50, 1, -1) - if(25 to 75) - target.electrocute_act(25,"Lightning Bolt") - playsound(get_turf(target), 'sound/magic/LightningShock.ogg', 50, 1, -1) - if(75 to 100) - //CHAIN LIGHTNING - Bolt(user,target,energy,user) + var/energy = min(world.time - start_time,100) + Bolt(user,target,max(15,energy/2),5,user) //5 bounces for energy/2 burn Reset(user) -/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin,mob/target,bolt_energy,mob/user = usr) +/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces,mob/user = usr) origin.Beam(target,icon_state="lightning",icon='icons/effects/effects.dmi',time=5) var/mob/living/carbon/current = target - if(bolt_energy < 75) - current.electrocute_act(25,"Lightning Bolt") + if(bounces < 1) + current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1) playsound(get_turf(current), 'sound/magic/LightningShock.ogg', 50, 1, -1) else - current.electrocute_act(25,"Lightning Bolt") + current.electrocute_act(bolt_energy,"Lightning Bolt",safety=1) playsound(get_turf(current), 'sound/magic/LightningShock.ogg', 50, 1, -1) var/list/possible_targets = new for(var/mob/living/M in view_or_range(range,target,"view")) @@ -102,4 +92,4 @@ return var/mob/living/next = pick(possible_targets) if(next) - Bolt(current,next,bolt_energy-6,user) // 5 max bounces \ No newline at end of file + Bolt(current,next,bolt_energy,bounces-1,user) \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 46fb3469ab3..472e92fdecd 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -376,7 +376,7 @@ Sorry Giacom. Please don't be mad :( return 0 -/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1.0) +/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1.0, safety = 0) return 0 //only carbon liveforms have this proc /mob/living/emp_act(severity) From ca79395bb7fbd26628b8ca1e555f43b31c174dcd Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 13 Jul 2015 09:49:37 +0200 Subject: [PATCH 20/65] Changelog --- html/changelogs/AnturK-LB.yml | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 html/changelogs/AnturK-LB.yml diff --git a/html/changelogs/AnturK-LB.yml b/html/changelogs/AnturK-LB.yml new file mode 100644 index 00000000000..e086a125e6a --- /dev/null +++ b/html/changelogs/AnturK-LB.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: AnturK + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage to each target depending on the chargeup" From d72cbcaf2f459a969852671caff5599b2bd616f5 Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 17 Jul 2015 01:15:21 +0200 Subject: [PATCH 21/65] - fixes handcuff overlay on monkey not showing. - Fixes the lack of handcuff icon on the hand screen object for alien humanoids.. - fix legcuff overlay not showing on monkey. - fixes fire overlay for monkey, aliens and cyborg, no longer looks human shaped. - Made the regenerate_icons's subprocs at the carbon level more OOP. --- code/game/gamemodes/cult/runes.dm | 4 +- .../objects/items/weapons/cigs_lighters.dm | 8 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- code/game/objects/structures/watercloset.dm | 22 +- code/modules/clothing/clothing.dm | 10 +- code/modules/clothing/head/helmet.dm | 8 +- code/modules/clothing/head/soft_caps.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- code/modules/mob/inventory.dm | 4 +- .../carbon/alien/humanoid/update_icons.dm | 75 +----- .../living/carbon/alien/larva/update_icons.dm | 5 +- code/modules/mob/living/carbon/carbon.dm | 16 +- .../mob/living/carbon/human/human_defense.dm | 14 +- .../mob/living/carbon/human/inventory.dm | 30 +-- .../mob/living/carbon/human/species.dm | 20 +- .../mob/living/carbon/human/update_icons.dm | 238 ++++-------------- code/modules/mob/living/carbon/inventory.dm | 12 +- .../mob/living/carbon/monkey/update_icons.dm | 189 +++----------- .../modules/mob/living/carbon/update_icons.dm | 153 ++++++++++- code/modules/mob/living/silicon/robot/life.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 8 +- .../simple_animal/friendly/drone/inventory.dm | 4 +- code/modules/mob/mob.dm | 4 +- code/modules/projectiles/gun.dm | 4 +- .../Chemistry-Reagents/Other-Reagents.dm | 10 +- icons/mob/OnFire.dmi | Bin 3571 -> 4592 bytes 26 files changed, 348 insertions(+), 500 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 56b4044c7f2..6fe3cb03d0b 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -750,11 +750,11 @@ var/list/sacrificed = list() if (cultist.handcuffed) cultist.handcuffed.loc = cultist.loc cultist.handcuffed = null - cultist.update_inv_handcuffed(0) + cultist.update_inv_handcuffed() if (cultist.legcuffed) cultist.legcuffed.loc = cultist.loc cultist.legcuffed = null - cultist.update_inv_legcuffed(0) + cultist.update_inv_legcuffed() if (istype(cultist.wear_mask, /obj/item/clothing/mask/muzzle)) cultist.unEquip(cultist.wear_mask) if(istype(cultist.loc, /obj/structure/closet)&&cultist.loc:welded) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 8af07589f9c..07c8af45854 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -195,9 +195,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM //can't think of any other way to update the overlays :< if(ismob(loc)) var/mob/M = loc - M.update_inv_wear_mask(0) - M.update_inv_l_hand(0) - M.update_inv_r_hand(0) + M.update_inv_wear_mask() + M.update_inv_l_hand() + M.update_inv_r_hand() /obj/item/clothing/mask/cigarette/proc/handle_reagents() @@ -365,7 +365,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM lit = 0 icon_state = icon_off item_state = icon_off - M.update_inv_wear_mask(0) + M.update_inv_wear_mask() packeditem = 0 name = "empty [initial(name)]" SSobj.processing.Remove(src) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index f8a00e2fd38..6aad3fe9b6c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -193,7 +193,7 @@ if(!C.legcuffed) //beartrap can't cuff your leg if there's already a beartrap or legcuffs. C.legcuffed = src src.loc = C - C.update_inv_legcuffed(0) + C.update_inv_legcuffed() feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart. else if(isanimal(L)) var/mob/living/simple_animal/SA = L diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 327159e3ad7..b2a013c798c 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -246,7 +246,7 @@ M.l_hand.clean_blood() if(M.back) if(M.back.clean_blood()) - M.update_inv_back(0) + M.update_inv_back() if(ishuman(M)) var/mob/living/carbon/human/H = M var/washgloves = 1 @@ -272,39 +272,39 @@ if(H.head) if(H.head.clean_blood()) - H.update_inv_head(0) + H.update_inv_head() if(H.wear_suit) if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit() else if(H.w_uniform) if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() if(H.gloves && washgloves) if(H.gloves.clean_blood()) - H.update_inv_gloves(0) + H.update_inv_gloves() if(H.shoes && washshoes) if(H.shoes.clean_blood()) - H.update_inv_shoes(0) + H.update_inv_shoes() if(H.wear_mask) if(washmask) if(H.wear_mask.clean_blood()) - H.update_inv_wear_mask(0) + H.update_inv_wear_mask() else H.lip_style = null H.update_body() if(H.glasses && washglasses) if(H.glasses.clean_blood()) - H.update_inv_glasses(0) + H.update_inv_glasses() if(H.ears && washears) if(H.ears.clean_blood()) - H.update_inv_ears(0) + H.update_inv_ears() if(H.belt) if(H.belt.clean_blood()) - H.update_inv_belt(0) + H.update_inv_belt() else if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags if(M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) + M.update_inv_wear_mask() else O.clean_blood() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c4833791343..3cea4f7c7ec 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -259,7 +259,7 @@ BLIND // can't see anything if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() return 1 @@ -390,7 +390,7 @@ atom/proc/generate_female_clothing(index,t_color,icon,type) if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() /obj/item/clothing/proc/weldingvisortoggle() //Malk: proc to toggle welding visors on helmets, masks, goggles, etc. if(can_use(usr)) @@ -414,11 +414,11 @@ atom/proc/generate_female_clothing(index,t_color,icon,type) tint = 0 if(istype(src, /obj/item/clothing/head)) //makes the mob-overlays update - usr.update_inv_head(0) + usr.update_inv_head() if(istype(src, /obj/item/clothing/glasses)) - usr.update_inv_glasses(0) + usr.update_inv_glasses() if(istype(src, /obj/item/clothing/mask)) - usr.update_inv_wear_mask(0) + usr.update_inv_wear_mask() /obj/item/clothing/proc/can_use(mob/user) if(user && ismob(user)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6233a560ac9..df493bedf75 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -58,14 +58,14 @@ flags_inv |= (visor_flags_inv) icon_state = initial(icon_state) usr << "[toggle_message] \the [src]." - usr.update_inv_head(0) + usr.update_inv_head() else up = !up flags &= ~(visor_flags) flags_inv &= ~(visor_flags_inv) icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" - usr.update_inv_head(0) + usr.update_inv_head() while(up) playsound(src.loc, "[activation_sound]", 100, 0, 4) sleep(15) @@ -172,7 +172,7 @@ if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc - H.update_inv_head(0) + H.update_inv_head() return @@ -206,7 +206,7 @@ update_helmlight(user) S.update_brightness(user) update_icon() - usr.update_inv_head(0) + usr.update_inv_head() verbs -= /obj/item/clothing/head/helmet/proc/toggle_helmlight return diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 8c7fa5b2204..0f6e39d72cf 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -38,7 +38,7 @@ else icon_state = "[item_color]soft" user << "You flip the hat back in normal position." - usr.update_inv_head(0) //so our mob-overlays update + usr.update_inv_head() //so our mob-overlays update /obj/item/clothing/head/soft/examine(mob/user) ..() diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 843f69e25c5..7759f4bd7e6 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -29,7 +29,7 @@ magpulse = !magpulse icon_state = "[magboot_state][magpulse]" user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system." - user.update_inv_shoes(0) //so our mob-overlays update + user.update_inv_shoes() //so our mob-overlays update user.update_gravity(user.mob_has_gravity()) /obj/item/clothing/shoes/magboots/negates_gravity() diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 4e0a620168d..8c8ab32c83b 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -30,7 +30,7 @@ W.equipped(src,slot_l_hand) if(client) client.screen |= W if(pulling == W) stop_pulling() - update_inv_l_hand(0) + update_inv_l_hand() W.pixel_x = initial(W.pixel_x) W.pixel_y = initial(W.pixel_y) return 1 @@ -49,7 +49,7 @@ W.equipped(src,slot_r_hand) if(client) client.screen |= W if(pulling == W) stop_pulling() - update_inv_r_hand(0) + update_inv_r_hand() W.pixel_x = initial(W.pixel_x) W.pixel_y = initial(W.pixel_y) return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 85a63338919..65d84763147 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -1,12 +1,3 @@ -//Xeno Overlays Indexes////////// -#define X_L_HAND_LAYER 1 -#define X_R_HAND_LAYER 2 -#define X_FIRE_LAYER 3 -#define X_TOTAL_LAYERS 3 -///////////////////////////////// - -/mob/living/carbon/alien/humanoid - var/list/overlays_standing[X_TOTAL_LAYERS] /mob/living/carbon/alien/humanoid/update_icons() update_hud() //TODO: remove the need for this to be here @@ -50,15 +41,10 @@ pixel_y = get_standard_pixel_y_offset(lying) /mob/living/carbon/alien/humanoid/regenerate_icons() - ..() - if (notransform) return - - update_inv_r_hand(0) - update_inv_l_hand(0) - update_hud() -// update_icons() //Handled in update_transform(), leaving this here as a reminder - update_fire() - update_transform() + if(!..()) + update_hud() + // update_icons() //Handled in update_transform(), leaving this here as a reminder + update_transform() /mob/living/carbon/alien/humanoid/update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that. if(lying > 0) @@ -67,47 +53,12 @@ update_icons() - -/mob/living/carbon/alien/humanoid/update_hud() - if(client) - client.screen |= contents - - -/mob/living/carbon/alien/humanoid/update_inv_r_hand(update_icons = 1) - if(r_hand) - var/t_state = r_hand.item_state - if(!t_state) - t_state = r_hand.icon_state - r_hand.screen_loc = ui_rhand - overlays_standing[X_R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state" = t_state) - else - overlays_standing[X_R_HAND_LAYER] = null - if(update_icons) - update_icons() - -/mob/living/carbon/alien/humanoid/update_inv_l_hand(update_icons = 1) - if(l_hand) - var/t_state = l_hand.item_state - if(!t_state) - t_state = l_hand.icon_state - l_hand.screen_loc = ui_lhand - overlays_standing[X_L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state" = t_state) - else - overlays_standing[X_L_HAND_LAYER] = null - if(update_icons) - update_icons() - -/mob/living/carbon/alien/humanoid/update_fire() - overlays -= overlays_standing[X_FIRE_LAYER] - if(on_fire) - overlays_standing[X_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -X_FIRE_LAYER) - overlays += overlays_standing[X_FIRE_LAYER] - return - else - overlays_standing[X_FIRE_LAYER] = null - -//Xeno Overlays Indexes////////// -#undef X_L_HAND_LAYER -#undef X_R_HAND_LAYER -#undef X_FIRE_LAYER -#undef X_TOTAL_LAYERS +#undef FACEMASK_LAYER +#undef HEAD_LAYER +#undef BACK_LAYER +#undef LEGCUFF_LAYER +#undef HANDCUFF_LAYER +#undef L_HAND_LAYER +#undef R_HAND_LAYER +#undef FIRE_LAYER +#undef TOTAL_LAYERS \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/update_icons.dm b/code/modules/mob/living/carbon/alien/larva/update_icons.dm index 104811c4fc1..dba2774866a 100644 --- a/code/modules/mob/living/carbon/alien/larva/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/update_icons.dm @@ -22,4 +22,7 @@ icon_state = "larva[state]" /mob/living/carbon/alien/larva/update_transform() //All this is handled in update_icons() - return update_icons() \ No newline at end of file + return update_icons() + +/mob/living/carbon/larva/update_inv_handcuffed() + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 83f2425156a..26c4530afd2 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -205,13 +205,13 @@ var/mob/living/carbon/human/H = src if(H.gloves) if(H.gloves.clean_blood()) - H.update_inv_gloves(0) + H.update_inv_gloves() else ..() // Clear the Blood_DNA list if(H.bloody_hands) H.bloody_hands = 0 H.bloody_hands_mob = null - H.update_inv_gloves(0) + H.update_inv_gloves() update_icons() //apply the now updated overlays to the mob @@ -455,13 +455,13 @@ var/const/GALOSHES_DONT_HELP = 8 handcuffed = null if(buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() - update_inv_handcuffed(0) + update_inv_handcuffed() return if(legcuffed) legcuffed.loc = loc legcuffed.dropped() legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() else src << "You fail to remove [I]!" @@ -478,11 +478,11 @@ var/const/GALOSHES_DONT_HELP = 8 if(handcuffed) handcuffed = null - update_inv_handcuffed(0) + update_inv_handcuffed() return else legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() else src << "You fail to break [I]!" @@ -492,7 +492,7 @@ var/const/GALOSHES_DONT_HELP = 8 handcuffed = null if (buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() - update_inv_handcuffed(0) + update_inv_handcuffed() if (client) client.screen -= W if (W) @@ -503,7 +503,7 @@ var/const/GALOSHES_DONT_HELP = 8 if (legcuffed) var/obj/item/weapon/W = legcuffed legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() if (client) client.screen -= W if (W) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 72a5d682d0c..5bac621bd86 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -170,10 +170,10 @@ emp_act if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood if(H.wear_suit) H.wear_suit.add_blood(src) - H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_wear_suit() //updates mob overlays to show the new blood (no refresh) else if(H.w_uniform) H.w_uniform.add_blood(src) - H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_w_uniform() //updates mob overlays to show the new blood (no refresh) if (H.gloves) var/obj/item/clothing/gloves/G = H.gloves G.add_blood(H) @@ -194,13 +194,13 @@ emp_act if(bloody) //Apply blood if(wear_mask) wear_mask.add_blood(src) - update_inv_wear_mask(0) + update_inv_wear_mask() if(head) head.add_blood(src) - update_inv_head(0) + update_inv_head() if(glasses && prob(33)) glasses.add_blood(src) - update_inv_glasses(0) + update_inv_glasses() if("chest") //Easier to score a stun but lasts less time if(stat == CONSCIOUS && I.force && prob(I.force + 10)) @@ -211,10 +211,10 @@ emp_act if(bloody) if(wear_suit) wear_suit.add_blood(src) - update_inv_wear_suit(0) + update_inv_wear_suit() if(w_uniform) w_uniform.add_blood(src) - update_inv_w_uniform(0) + update_inv_w_uniform() if(Iforce > 10 || Iforce >= 5 && prob(33)) forcesay(hit_appends) //forcesay checks stat already diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index a86275539aa..30f90b8c51a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -167,9 +167,9 @@ return if(H.equip_to_appropriate_slot(I)) if(hand) - update_inv_l_hand(0) + update_inv_l_hand() else - update_inv_r_hand(0) + update_inv_r_hand() else if(s_active && s_active.can_be_inserted(I,1)) //if storage active insert there s_active.handle_item_insertion(I) else if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1)) //see if we have box in other hand @@ -250,7 +250,7 @@ wear_suit = null if(I.flags_inv & HIDEJUMPSUIT) update_inv_w_uniform() - update_inv_wear_suit(0) + update_inv_wear_suit() else if(I == w_uniform) if(r_store) unEquip(r_store, 1) //Again, makes sense for pockets to drop. @@ -262,45 +262,45 @@ unEquip(belt) w_uniform = null update_suit_sensors() - update_inv_w_uniform(0) + update_inv_w_uniform() else if(I == gloves) gloves = null - update_inv_gloves(0) + update_inv_gloves() else if(I == glasses) glasses = null - update_inv_glasses(0) + update_inv_glasses() else if(I == ears) ears = null - update_inv_ears(0) + update_inv_ears() else if(I == shoes) shoes = null - update_inv_shoes(0) + update_inv_shoes() else if(I == belt) belt = null - update_inv_belt(0) + update_inv_belt() else if(I == wear_mask) wear_mask = null if(I.flags & BLOCKHAIR) - update_hair(0) //rebuild hair + update_hair() //rebuild hair if(internal) if(internals) internals.icon_state = "internal0" internal = null sec_hud_set_ID() - update_inv_wear_mask(0) + update_inv_wear_mask() else if(I == wear_id) wear_id = null sec_hud_set_ID() - update_inv_wear_id(0) + update_inv_wear_id() else if(I == r_store) r_store = null - update_inv_pockets(0) + update_inv_pockets() else if(I == l_store) l_store = null - update_inv_pockets(0) + update_inv_pockets() else if(I == s_store) s_store = null - update_inv_s_store(0) + update_inv_s_store() //This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() //set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc. diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 887f52a85d4..4d4876bb4db 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -578,17 +578,17 @@ if(H.overeatduration < 100) H << "You feel fit again!" H.disabilities &= ~FAT - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() H.update_inv_wear_suit() else if(H.overeatduration > 500) H << "You suddenly feel blubbery!" H.disabilities |= FAT - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() H.update_inv_wear_suit() // nutrition decrease and satiety - if (H.nutrition > 0 && H.stat != 2) + if (H.nutrition > 0 && H.stat != DEAD) var/hunger_rate = HUNGER_FACTOR if(H.satiety > 0) H.satiety-- @@ -1016,10 +1016,10 @@ if(get_dist(H, H) <= 1) //people with TK won't get smeared with blood if(H.wear_suit) H.wear_suit.add_blood(H) - H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_wear_suit() //updates mob overlays to show the new blood (no refresh) else if(H.w_uniform) H.w_uniform.add_blood(H) - H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_w_uniform() //updates mob overlays to show the new blood (no refresh) if (H.gloves) var/obj/item/clothing/gloves/G = H.gloves G.add_blood(H) @@ -1042,13 +1042,13 @@ if(bloody) //Apply blood if(H.wear_mask) H.wear_mask.add_blood(H) - H.update_inv_wear_mask(0) + H.update_inv_wear_mask() if(H.head) H.head.add_blood(H) - H.update_inv_head(0) + H.update_inv_head() if(H.glasses && prob(33)) H.glasses.add_blood(H) - H.update_inv_glasses(0) + H.update_inv_glasses() if("chest") //Easier to score a stun but lasts less time if(H.stat == CONSCIOUS && I.force && prob(I.force + 10)) @@ -1059,10 +1059,10 @@ if(bloody) if(H.wear_suit) H.wear_suit.add_blood(H) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit() if(H.w_uniform) H.w_uniform.add_blood(H) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() if(Iforce > 10 || Iforce >= 5 && prob(33)) H.forcesay(hit_appends) //forcesay checks stat already. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index aa276babfbd..8866d7fccf9 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -47,8 +47,7 @@ If you have any questions/constructive-comments/bugs-to-report Please contact me on #coderbus IRC. ~Carnie x //Carn can sometimes be hard to reach now. However IRC is still your best bet for getting help. */ - -//Human Overlays Indexes///////// +// Human Overlays Indexes ///////////////// #define SPECIES_LAYER 26 // mutantrace colors... these are on a seperate layer in order to prvent #define BODY_BEHIND_LAYER 25 #define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup) @@ -65,21 +64,11 @@ Please contact me on #coderbus IRC. ~Carnie x #define GLASSES_LAYER 13 #define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? #define SUIT_STORE_LAYER 11 -#define BACK_LAYER 10 -#define HAIR_LAYER 9 //TODO: make part of head layer? -#define FACEMASK_LAYER 8 -#define HEAD_LAYER 7 -#define HANDCUFF_LAYER 6 -#define LEGCUFF_LAYER 5 -#define L_HAND_LAYER 4 -#define R_HAND_LAYER 3 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands -#define BODY_FRONT_LAYER 2 -#define FIRE_LAYER 1 //If you're on fire -#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; -////////////////////////////////// +#define HAIR_LAYER 10 //TODO: make part of head layer? +#define BODY_FRONT_LAYER 9 -/mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] +//KEEP THE TOTAL_LAYER DEFINE UPDATED ! +////////////////////////////////////////// /mob/living/carbon/human/proc/update_base_icon_state() //var/race = dna ? dna.mutantrace : null @@ -94,17 +83,6 @@ Please contact me on #coderbus IRC. ~Carnie x icon_state = "[base_icon_state]_s" -/mob/living/carbon/human/proc/apply_overlay(cache_index) - var/image/I = overlays_standing[cache_index] - - if(I) - overlays += I - -/mob/living/carbon/human/proc/remove_overlay(cache_index) - if(overlays_standing[cache_index]) - overlays -= overlays_standing[cache_index] - overlays_standing[cache_index] = null - //UPDATES OVERLAYS FROM OVERLAYS_STANDING //TODO: Remove all instances where this proc is called. It used to be the fastest way to swap between standing/lying. /mob/living/carbon/human/update_icons() @@ -174,12 +152,7 @@ Please contact me on #coderbus IRC. ~Carnie x dna.species.handle_body(src) /mob/living/carbon/human/update_fire() - - remove_overlay(FIRE_LAYER) - if(on_fire) - overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"=-FIRE_LAYER) - - apply_overlay(FIRE_LAYER) + ..("Standing") /mob/living/carbon/human/proc/update_augments() @@ -212,33 +185,28 @@ Please contact me on #coderbus IRC. ~Carnie x /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() - ..() - if(notransform) return - update_body() - update_hair() - update_inv_w_uniform() - update_inv_wear_id() - update_inv_gloves() - update_inv_glasses() - update_inv_ears() - update_inv_shoes() - update_inv_s_store() - update_inv_wear_mask() - update_inv_head() - update_inv_belt() - update_inv_back() - update_inv_wear_suit() - update_inv_r_hand() - update_inv_l_hand() - update_inv_handcuffed() - update_inv_legcuffed() - update_inv_pockets() - update_fire() - update_transform() - //Hud Stuff - update_hud() - // Mutantrace colors - update_mutcolor() + + if(!..()) + update_body() + update_hair() + update_inv_w_uniform() + update_inv_wear_id() + update_inv_gloves() + update_inv_glasses() + update_inv_ears() + update_inv_shoes() + update_inv_s_store() + update_inv_wear_mask() + update_inv_head() + update_inv_belt() + update_inv_back() + update_inv_wear_suit() + update_inv_pockets() + update_transform() + //Hud Stuff + update_hud() + // Mutantrace colors + update_mutcolor() /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv @@ -414,27 +382,12 @@ Please contact me on #coderbus IRC. ~Carnie x /mob/living/carbon/human/update_inv_head() - remove_overlay(HEAD_LAYER) - - if(head) + var/obj/item/H = ..() + if(H) if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open ... - head.screen_loc = ui_head //TODO //...draw the item in the inventory screen - client.screen += head //Either way, add the item to the HUD - - var/image/standing - if(head.alternate_worn_icon) - standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) - if(!standing) - standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) - standing.color = head.color // For now, this is here solely for kitty ears, but everything should do this eventually - standing.alpha = head.alpha - - overlays_standing[HEAD_LAYER] = standing - - if(head.blood_DNA) - standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") - + H.screen_loc = ui_head //TODO //...draw the item in the inventory screen + client.screen += H //Either way, add the item to the HUD apply_overlay(HEAD_LAYER) @@ -491,6 +444,7 @@ Please contact me on #coderbus IRC. ~Carnie x apply_overlay(SUIT_LAYER) + /mob/living/carbon/human/update_inv_pockets() if(l_store) l_store.screen_loc = ui_storage1 //TODO @@ -503,125 +457,41 @@ Please contact me on #coderbus IRC. ~Carnie x /mob/living/carbon/human/update_inv_wear_mask() - remove_overlay(FACEMASK_LAYER) - - if(istype(wear_mask, /obj/item/clothing/mask)) + var/obj/item/clothing/mask/M = ..() + if(M) if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open ... - wear_mask.screen_loc = ui_mask //TODO //...draw the item in the inventory screen - client.screen += wear_mask //Either way, add the item to the HUD - - var/image/standing - if(wear_mask.alternate_worn_icon) - standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) - if(!standing) - standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) - - overlays_standing[FACEMASK_LAYER] = standing - - if(wear_mask.blood_DNA && !istype(wear_mask, /obj/item/clothing/mask/cigarette)) - standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") - + M.screen_loc = ui_mask //TODO //...draw the item in the inventory screen + client.screen += M //Either way, add the item to the HUD update_mutant_bodyparts() - apply_overlay(FACEMASK_LAYER) + /mob/living/carbon/human/update_inv_back() - remove_overlay(BACK_LAYER) - - if(back) - back.screen_loc = ui_back + var/obj/item/B = ..() + if(B) + B.screen_loc = ui_back if(client && hud_used && hud_used.hud_shown) - client.screen += back - - var/image/standing - if(back.alternate_worn_icon) - standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) - if(!standing) - standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) - - overlays_standing[BACK_LAYER] = standing - + client.screen += B apply_overlay(BACK_LAYER) - - -/mob/living/carbon/human/update_hud() //TODO: do away with this if possible - if(client) - client.screen |= contents - if(hud_used) - hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar - - /mob/living/carbon/human/update_inv_handcuffed() - remove_overlay(HANDCUFF_LAYER) - - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() //TODO: should be handled elsewhere - if(hud_used) //hud handcuff icons - var/obj/screen/inventory/R = hud_used.adding[3] - var/obj/screen/inventory/L = hud_used.adding[4] - R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") - L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") - - overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) - else - if(hud_used) - var/obj/screen/inventory/R = hud_used.adding[3] - var/obj/screen/inventory/L = hud_used.adding[4] - R.overlays = null - L.overlays = null - - apply_overlay(HANDCUFF_LAYER) - + if(..()) + overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) + apply_overlay(HANDCUFF_LAYER) /mob/living/carbon/human/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) - + overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) +/mob/living/carbon/human/update_hud() //TODO: do away with this if possible + if(..()) + if(hud_used) + hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar -/mob/living/carbon/human/update_inv_r_hand() - remove_overlay(R_HAND_LAYER) - if (handcuffed) - drop_r_hand() - return - if(r_hand) - r_hand.screen_loc = ui_rhand //TODO - if(client) - client.screen += r_hand - - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - - overlays_standing[R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]", "layer"=-R_HAND_LAYER) - - apply_overlay(R_HAND_LAYER) - - - -/mob/living/carbon/human/update_inv_l_hand() - remove_overlay(L_HAND_LAYER) - if (handcuffed) - drop_l_hand() - return - if(l_hand) - l_hand.screen_loc = ui_lhand //TODO - if(client) - client.screen += l_hand - - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - - overlays_standing[L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]", "layer"=-L_HAND_LAYER) - - apply_overlay(L_HAND_LAYER) /mob/living/carbon/human/proc/wear_female_version(t_color, icon, layer, type) var/index = "[t_color]_s" @@ -652,15 +522,7 @@ Please contact me on #coderbus IRC. ~Carnie x #undef EARS_LAYER #undef SUIT_LAYER #undef GLASSES_LAYER -#undef FACEMASK_LAYER #undef BELT_LAYER #undef SUIT_STORE_LAYER -#undef BACK_LAYER #undef HAIR_LAYER -#undef HEAD_LAYER -#undef HANDCUFF_LAYER -#undef LEGCUFF_LAYER -#undef L_HAND_LAYER -#undef R_HAND_LAYER -#undef FIRE_LAYER #undef TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 876f23fc37a..44ba92c73f2 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -25,22 +25,22 @@ if(I == head) head = null if(I.flags & BLOCKHAIR) - update_hair(0) - update_inv_head(0) + update_hair() + update_inv_head() else if(I == back) back = null - update_inv_back(0) + update_inv_back() else if(I == wear_mask) if(istype(src, /mob/living/carbon/human)) //If we don't do this hair won't be properly rebuilt. return wear_mask = null - update_inv_wear_mask(0) + update_inv_wear_mask() else if(I == handcuffed) handcuffed = null if(buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() - update_inv_handcuffed(0) + update_inv_handcuffed() else if(I == legcuffed) legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 3e47c990d9d..03e2f721a9c 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -1,31 +1,13 @@ -//Monkey Overlays Indexes//////// -#define M_FIRE_LAYER 7 -#define M_MASK_LAYER 6 -#define M_HEAD_LAYER 5 -#define M_BACK_LAYER 4 -#define M_HANDCUFF_LAYER 3 -#define M_L_HAND_LAYER 2 -#define M_R_HAND_LAYER 1 -#define M_TOTAL_LAYERS 7 -///////////////////////////////// - -/mob/living/carbon/monkey - var/list/overlays_standing[M_TOTAL_LAYERS] /mob/living/carbon/monkey/regenerate_icons() - ..() - update_inv_wear_mask(0) - update_inv_head(0) - update_inv_back(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_fire() - update_icons() - update_transform() - //Hud Stuff - update_hud() - return + if(!..()) + update_inv_wear_mask() + update_inv_head() + update_inv_back() + update_icons() + update_transform() + //Hud Stuff + update_hud() /mob/living/carbon/monkey/update_icons() update_hud() @@ -35,138 +17,43 @@ overlays += I //////// -/mob/living/carbon/monkey/update_inv_wear_mask(update_icons=1) - if(wear_mask && istype(wear_mask, /obj/item/clothing/mask) ) - wear_mask.screen_loc = ui_monkey_mask +/mob/living/carbon/monkey/update_inv_wear_mask() + var/obj/item/clothing/mask/M = ..() + if(M) + M.screen_loc = ui_monkey_mask if(client && hud_used) - client.screen += wear_mask - overlays -= overlays_standing[M_MASK_LAYER] - var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER) - if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") - overlays_standing[M_MASK_LAYER] = standing - overlays += overlays_standing[M_MASK_LAYER] - else - overlays -= overlays_standing[M_MASK_LAYER] - overlays_standing[M_MASK_LAYER] = null - if(update_icons) update_icons() + client.screen += M + apply_overlay(FACEMASK_LAYER) -/mob/living/carbon/monkey/update_inv_head(update_icons=1) - if(head) - head.screen_loc = ui_monkey_head +/mob/living/carbon/monkey/update_inv_head() + var/obj/item/H = ..() + if(H) + H.screen_loc = ui_monkey_head if(client && hud_used) - client.screen += head - overlays -= overlays_standing[M_HEAD_LAYER] - var/image/standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]", "layer" = -M_HEAD_LAYER) - overlays_standing[M_HEAD_LAYER] = standing - overlays += overlays_standing[M_HEAD_LAYER] - else - overlays -= overlays_standing[M_HEAD_LAYER] - overlays_standing[M_HEAD_LAYER] = null - if(update_icons) update_icons() + client.screen += H + apply_overlay(HEAD_LAYER) - -/mob/living/carbon/monkey/update_inv_r_hand(update_icons=1) - if (handcuffed) - drop_r_hand() - return - if(r_hand) - r_hand.screen_loc = ui_rhand +/mob/living/carbon/monkey/update_inv_back() + var/obj/item/B = ..() + if(B) + B.screen_loc = ui_monkey_back if(client && hud_used) - client.screen += r_hand - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - overlays -= overlays_standing[M_R_HAND_LAYER] - var/image/standing = image("icon" = r_hand.righthand_file, "icon_state" = t_state, "layer" = -M_R_HAND_LAYER) - standing.pixel_y = 2 - overlays_standing[M_R_HAND_LAYER] = standing - overlays += overlays_standing[M_R_HAND_LAYER] - else - overlays -= overlays_standing[M_R_HAND_LAYER] - overlays_standing[M_R_HAND_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_l_hand(update_icons=1) - if (handcuffed) - drop_l_hand() - return - if(l_hand) - l_hand.screen_loc = ui_lhand - if(client && hud_used) - client.screen += l_hand - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - overlays -= overlays_standing[M_L_HAND_LAYER] - var/image/standing = image("icon" = l_hand.lefthand_file, "icon_state" = t_state, "layer" = -M_L_HAND_LAYER) - standing.pixel_y = 2 - overlays_standing[M_L_HAND_LAYER] = standing - overlays += overlays_standing[M_L_HAND_LAYER] - else - overlays -= overlays_standing[M_L_HAND_LAYER] - overlays_standing[M_L_HAND_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_back(update_icons=1) - if(back) - back.screen_loc = ui_monkey_back - if(client && hud_used) - client.screen += back - overlays -= overlays_standing[M_BACK_LAYER] - overlays_standing[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]", "layer" = -M_BACK_LAYER) - overlays += overlays_standing[M_BACK_LAYER] - else - overlays -= overlays_standing[M_BACK_LAYER] - overlays_standing[M_BACK_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_handcuffed(update_icons=1) - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() - if(hud_used) //hud handcuff icons - var/obj/screen/inventory/R = hud_used.adding[4] - var/obj/screen/inventory/L = hud_used.adding[5] - R.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "markus") - L.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "gabrielle") - overlays -= overlays_standing[M_HANDCUFF_LAYER] - overlays_standing[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff1", "layer" = -M_HANDCUFF_LAYER) - overlays += overlays_standing[M_HANDCUFF_LAYER] - else - if(hud_used) - var/obj/screen/inventory/R = hud_used.adding[4] - var/obj/screen/inventory/L = hud_used.adding[5] - R.overlays = null - L.overlays = null - overlays -= overlays_standing[M_HANDCUFF_LAYER] - overlays_standing[M_HANDCUFF_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_hud() - if(client) - client.screen |= contents + client.screen += B + apply_overlay(BACK_LAYER) /mob/living/carbon/monkey/update_fire() - overlays -= overlays_standing[M_FIRE_LAYER] - if(on_fire) - overlays_standing[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -M_FIRE_LAYER) - overlays += overlays_standing[M_FIRE_LAYER] - return - else - overlays_standing[M_FIRE_LAYER] = null + ..("Monkey_burning") +/mob/living/carbon/monkey/update_inv_handcuffed() + if(..()) + overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) + apply_overlay(HANDCUFF_LAYER) -//Monkey Overlays Indexes//////// -#undef M_FIRE_LAYER -#undef M_MASK_LAYER -#undef M_BACK_LAYER -#undef M_HANDCUFF_LAYER -#undef M_L_HAND_LAYER -#undef M_R_HAND_LAYER -#undef M_TOTAL_LAYERS - +/mob/living/carbon/monkey/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + if(legcuffed) + var/image/standing = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) + standing.pixel_y = 8 + overlays_standing[LEGCUFF_LAYER] = standing + apply_overlay(LEGCUFF_LAYER) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 2b2c3470a04..95724c27f01 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -1,6 +1,18 @@ -//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() -//I thought about mob/living but silicons and simple_animals don't want this just yet. -//Right now just handles lying down, but could handle other cases later. + + +//Carbon Overlays Indexes///////// +#define FACEMASK_LAYER 8 +#define HEAD_LAYER 7 +#define BACK_LAYER 6 +#define LEGCUFF_LAYER 5 +#define HANDCUFF_LAYER 4 +#define L_HAND_LAYER 3 +#define R_HAND_LAYER 2 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands +#define FIRE_LAYER 1 //If you're on fire +#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; +////////////////////////////////// + + //IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. /mob/living/carbon/update_transform() var/matrix/ntransform = matrix(transform) //aka transform.Copy() @@ -27,4 +39,137 @@ if(changed) animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). \ No newline at end of file + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). + + +/mob/living/carbon + var/list/overlays_standing[TOTAL_LAYERS] + +/mob/living/carbon/proc/apply_overlay(cache_index) + var/image/I = overlays_standing[cache_index] + if(I) + overlays += I + +/mob/living/carbon/proc/remove_overlay(cache_index) + if(overlays_standing[cache_index]) + overlays -= overlays_standing[cache_index] + overlays_standing[cache_index] = null + +/mob/living/carbon/update_inv_r_hand() + remove_overlay(R_HAND_LAYER) + if (handcuffed) + drop_r_hand() + return + if(r_hand) + r_hand.screen_loc = ui_rhand + if(client && hud_used) + client.screen += r_hand + var/t_state = r_hand.item_state + if(!t_state) + t_state = r_hand.icon_state + overlays_standing[R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]", "layer"=-R_HAND_LAYER) + + apply_overlay(R_HAND_LAYER) + +/mob/living/carbon/update_inv_l_hand() + remove_overlay(L_HAND_LAYER) + if (handcuffed) + drop_l_hand() + return + if(l_hand) + l_hand.screen_loc = ui_lhand + if(client && hud_used) + client.screen += l_hand + var/t_state = l_hand.item_state + if(!t_state) + t_state = l_hand.icon_state + overlays_standing[L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]", "layer"=-L_HAND_LAYER) + + apply_overlay(L_HAND_LAYER) + +/mob/living/carbon/update_fire(var/fire_icon = "Generic_mob_burning") + remove_overlay(FIRE_LAYER) + if(on_fire) + overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) + + apply_overlay(FIRE_LAYER) + +/mob/living/carbon/update_hud() + if(client) + client.screen |= contents + return 1 + +/mob/living/carbon/regenerate_icons() + if(notransform) + return 1 + update_inv_r_hand() + update_inv_l_hand() + update_inv_handcuffed() + update_inv_legcuffed() + update_fire() + +/mob/living/carbon/update_inv_wear_mask() + remove_overlay(FACEMASK_LAYER) + if(istype(wear_mask, /obj/item/clothing/mask)) + var/image/standing + if(wear_mask.alternate_worn_icon) + standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + if(!standing) + standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + + overlays_standing[FACEMASK_LAYER] = standing + + if(wear_mask.blood_DNA && (wear_mask.body_parts_covered & HEAD)) + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + return wear_mask + +/mob/living/carbon/human/update_inv_back() + remove_overlay(BACK_LAYER) + if(back) + var/image/standing + if(back.alternate_worn_icon) + standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + if(!standing) + standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + + overlays_standing[BACK_LAYER] = standing + return back + + +/mob/living/carbon/human/update_inv_head() + remove_overlay(HEAD_LAYER) + if(head) + var/image/standing + if(head.alternate_worn_icon) + standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + if(!standing) + standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + standing.color = head.color // For now, this is here solely for kitty ears, but everything should do this eventually + standing.alpha = head.alpha + + overlays_standing[HEAD_LAYER] = standing + + if(head.blood_DNA) + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") + return head + +/mob/living/carbon/update_inv_handcuffed() + remove_overlay(HANDCUFF_LAYER) + if(handcuffed) + drop_r_hand() + drop_l_hand() + stop_pulling() //TODO: should be handled elsewhere + if(hud_used) //hud handcuff icons + var/obj/screen/inventory/R = hud_used.r_hand_hud_object + var/obj/screen/inventory/L = hud_used.l_hand_hud_object + R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") + L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") + return 1 + else + if(hud_used) + var/obj/screen/inventory/R = hud_used.r_hand_hud_object + var/obj/screen/inventory/L = hud_used.l_hand_hud_object + R.overlays = null + L.overlays = null + + diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 7ce41a2de6a..d97d6a420c7 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -189,9 +189,9 @@ return /mob/living/silicon/robot/update_fire() - overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") + overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning") if(on_fire) - overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") + overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning") /mob/living/silicon/robot/fire_act() if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 11ebe6edb27..064886ef119 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -866,16 +866,16 @@ if(cleaned_human.lying) if(cleaned_human.head) cleaned_human.head.clean_blood() - cleaned_human.update_inv_head(0) + cleaned_human.update_inv_head() if(cleaned_human.wear_suit) cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit(0) + cleaned_human.update_inv_wear_suit() else if(cleaned_human.w_uniform) cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform(0) + cleaned_human.update_inv_w_uniform() if(cleaned_human.shoes) cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes(0) + cleaned_human.update_inv_shoes() cleaned_human.clean_blood() cleaned_human << "[src] cleans your face!" return diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm index faf63c739c4..a739daac976 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm @@ -125,9 +125,9 @@ return if(equip_to_appropriate_slot(I)) if(hand) - update_inv_l_hand(0) + update_inv_l_hand() else - update_inv_r_hand(0) + update_inv_r_hand() else if(s_active && s_active.can_be_inserted(I,1)) //if storage active insert there s_active.handle_item_insertion(I) else if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1)) //see if we have box in other hand diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6e9e8ccd996..b99fc0f9c89 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -421,12 +421,12 @@ var/list/slot_equipment_priority = list( \ var/obj/item/W = l_hand if (W) W.attack_self(src) - update_inv_l_hand(0) + update_inv_l_hand() else var/obj/item/W = r_hand if (W) W.attack_self(src) - update_inv_r_hand(0) + update_inv_r_hand() return /* diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index e692bd7bb97..ae930ef4602 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -224,9 +224,9 @@ semicd = 0 if(user.hand) - user.update_inv_l_hand(0) + user.update_inv_l_hand() else - user.update_inv_r_hand(0) + user.update_inv_r_hand() feedback_add_details("gun_fired","[src.name]") /obj/item/weapon/gun/attack(mob/M as mob, mob/user) diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index 923dfa759b9..2ebceebbd64 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -576,21 +576,21 @@ C.l_hand.clean_blood() if(C.wear_mask) if(C.wear_mask.clean_blood()) - C.update_inv_wear_mask(0) + C.update_inv_wear_mask() if(ishuman(M)) var/mob/living/carbon/human/H = C if(H.head) if(H.head.clean_blood()) - H.update_inv_head(0) + H.update_inv_head() if(H.wear_suit) if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit() else if(H.w_uniform) if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() if(H.shoes) if(H.shoes.clean_blood()) - H.update_inv_shoes(0) + H.update_inv_shoes() M.clean_blood() /datum/reagent/cryptobiolin diff --git a/icons/mob/OnFire.dmi b/icons/mob/OnFire.dmi index 44ead91e362701e42a57957d13424cc730ccd4e2..7768bf0269fe18274101506276df32a411960210 100644 GIT binary patch delta 4501 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 delta 3472 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 yM7qLh$Rqx5-f+J!= Date: Fri, 17 Jul 2015 01:05:18 +0100 Subject: [PATCH 22/65] Reduced cost of Donksoft weapons. --- code/datums/uplink_item.dm | 6 +++--- html/changelogs/fayrik-putadonksoftonit.yml | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/fayrik-putadonksoftonit.yml diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 739a747f967..de15d5c356c 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -183,7 +183,7 @@ var/list/uplink_items = list() name = "Toy Submachine Gun" desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade rounds with a 20-round magazine." item = /obj/item/weapon/gun/projectile/automatic/c20r/toy - cost = 12 + cost = 8 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -191,7 +191,7 @@ var/list/uplink_items = list() name = "Toy Machine Gun" desc = "A fully-loaded Donksoft belt-fed machine gun. This weapon has a massive 50-round magazine of devastating riot grade darts, that can briefly incapacitate someone in just one volley." item = /obj/item/weapon/gun/projectile/automatic/l6_saw/toy - cost = 30 + cost = 12 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 @@ -357,7 +357,7 @@ var/list/uplink_items = list() name = "Toy Gun (with Stun Darts)" desc = "An innocent looking toy pistol designed to fire foam darts. Comes loaded with riot grade darts, to incapacitate a target." item = /obj/item/weapon/gun/projectile/automatic/toy/pistol/riot - cost = 10 + cost = 6 surplus = 10 excludefrom = list(/datum/game_mode/gang) diff --git a/html/changelogs/fayrik-putadonksoftonit.yml b/html/changelogs/fayrik-putadonksoftonit.yml new file mode 100644 index 00000000000..fb12d1cfd93 --- /dev/null +++ b/html/changelogs/fayrik-putadonksoftonit.yml @@ -0,0 +1,6 @@ +author: Fayrik + +delete-after: True + +changes: + - tweak: "Syndicate Donksoft gear now costs less." \ No newline at end of file From c4ff99125d44e3377a39500ba7c1810776bab00c Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 17 Jul 2015 01:24:57 +0100 Subject: [PATCH 23/65] Fixed changeling night vision. Changelog. Better code, fixed exploit. --- .../changeling/powers/augmented_eyesight.dm | 12 +++++++----- html/changelogs/xxalpha-changeling_vision.yml | 6 ++++++ 2 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 html/changelogs/xxalpha-changeling_vision.yml diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index 7eb4f1eebac..fb25c4401c0 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -9,7 +9,9 @@ dna_cost = 2 //Would be 1 without thermal vision var/active = 0 //Whether or not vision is enhanced -/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/user) +/obj/effect/proc_holder/changeling/augmented_eyesight/sting_action(mob/living/carbon/human/user) + if(!istype(user)) + return active = !active if(active) user << "We feel a minute twitch in our eyes, and darkness creeps away." @@ -17,12 +19,12 @@ user.sight |= SEE_MOBS user.permanent_sight_flags |= SEE_MOBS user.see_in_dark = 8 - user.see_invisible = SEE_INVISIBLE_MINIMUM + user.dna.species.invis_sight = SEE_INVISIBLE_MINIMUM else user << "Our vision dulls. Shadows gather." user.weakeyes = 0 - user.sight -= SEE_MOBS - user.permanent_sight_flags -= SEE_MOBS + user.sight &= ~SEE_MOBS + user.permanent_sight_flags &= ~SEE_MOBS user.see_in_dark = 0 - user.see_invisible = SEE_INVISIBLE_LIVING + user.dna.species.invis_sight = initial(user.dna.species.invis_sight) return 1 diff --git a/html/changelogs/xxalpha-changeling_vision.yml b/html/changelogs/xxalpha-changeling_vision.yml new file mode 100644 index 00000000000..94ab8979902 --- /dev/null +++ b/html/changelogs/xxalpha-changeling_vision.yml @@ -0,0 +1,6 @@ +author: xxalpha + +delete-after: True + +changes: + - bugfix: "Changeling augmented eyesight night vision is now working." From 5aad09d638cf14d89f225ef8bbed920095a5ff59 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 17 Jul 2015 05:49:35 +0100 Subject: [PATCH 24/65] Fixed night vision spell not working. --- .../living/simple_animal/hostile/statue.dm | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index 9d5fc402615..8ff2d451a10 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -198,10 +198,19 @@ /obj/effect/proc_holder/spell/targeted/night_vision/cast(list/targets) for(var/mob/living/target in targets) - if(target.see_invisible == SEE_INVISIBLE_LIVING) - target.see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING - name = "Toggle Nightvision \[ON\]" + if(istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = target + if(H.dna.species.invis_sight == SEE_INVISIBLE_LIVING) + H.dna.species.invis_sight = SEE_INVISIBLE_OBSERVER_NOLIGHTING + name = "Toggle Nightvision \[ON]" + else + H.dna.species.invis_sight = SEE_INVISIBLE_LIVING + name = "Toggle Nightvision \[OFF]" + else - target.see_invisible = SEE_INVISIBLE_LIVING - name = "Toggle Nightvision \[OFF\]" - return \ No newline at end of file + if(target.see_invisible == SEE_INVISIBLE_LIVING) + target.see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + name = "Toggle Nightvision \[ON]" + else + target.see_invisible = SEE_INVISIBLE_LIVING + name = "Toggle Nightvision \[OFF]" From e2d76a0116de8c2cd4e1199f7f3dd62d71194923 Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 17 Jul 2015 17:12:16 +0200 Subject: [PATCH 25/65] Fixes drone and cyborg not being affected by mounted flashers. Remove eye stat damage from flashbang's bang() proc (eye damage is already handled in carbon/flash_eyes()) Changed many flash producing effect to affect all carbons instead of only humans. The experimental weldingtool now produces less light than regular welding tool and can be used safely with only sunglasses. --- code/game/machinery/flasher.dm | 2 +- code/game/objects/items/weapons/grenades/flashbang.dm | 3 +-- .../objects/items/weapons/grenades/spawnergrenade.dm | 4 ++-- code/game/objects/items/weapons/tools.dm | 6 ++++-- code/modules/events/anomaly_bluespace.dm | 6 +++--- code/modules/mob/living/carbon/carbon.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 3 +++ code/modules/mob/living/silicon/silicon.dm | 9 +++++---- .../mob/living/simple_animal/friendly/drone/_drone.dm | 7 ++++--- code/modules/reagents/Chemistry-Recipes.dm | 4 ++-- .../modules/reagents/Chemistry-Recipes/Slime_extracts.dm | 6 +++--- 12 files changed, 30 insertions(+), 24 deletions(-) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index a970cbbad17..be2f33815a8 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -88,7 +88,7 @@ if (get_dist(src, L) > range) continue - if(L.flash_eyes()) + if(L.flash_eyes(affect_silicon = 1)) L.Weaken(strength) if(L.weakeyes) L.Weaken(strength * 1.5) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 9f17b250993..d93940987eb 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -34,8 +34,7 @@ M.Stun(15) M.eye_stat += 8 - if(M.flash_eyes()) - M.eye_stat += rand(1, 3) + if(M.flash_eyes(affect_silicon = 1)) M.Stun(max(10/distance, 3)) M.Weaken(max(10/distance, 3)) diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm index 9edf321b7e8..b5a6a1968e6 100644 --- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm +++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm @@ -14,8 +14,8 @@ // Make a quick flash var/turf/T = get_turf(src) playsound(T, 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(T, null)) - M.flash_eyes() + for(var/mob/living/carbon/C in viewers(T, null)) + C.flash_eyes() for(var/i=1, i<=deliveryamt, i++) var/atom/movable/x = new spawner_type diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 75f5e0d2f52..0ec9e10f923 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -162,6 +162,7 @@ var/max_fuel = 20 //The max amount of fuel the welder can hold var/change_icons = 1 var/can_off_process = 0 + var/light_intensity = 2 //how powerful the emitted light is when used. /obj/item/weapon/weldingtool/New() ..() @@ -289,7 +290,7 @@ reagents.remove_reagent("welding_fuel", amount) check_fuel() if(M) - M.flash_eyes(2) + M.flash_eyes(light_intensity) return 1 else if(M) @@ -409,7 +410,7 @@ /obj/item/weapon/weldingtool/experimental name = "experimental welding tool" - desc = "An experimental welder capable of self-fuel generation." + desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes." icon_state = "exwelder" item_state = "exwelder" max_fuel = 40 @@ -418,6 +419,7 @@ var/last_gen = 0 change_icons = 0 can_off_process = 1 + light_intensity = 1 //Proc to make the experimental welder generate fuel, optimized as fuck -Sieve diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 10ca2b4b64e..eb47c8581a9 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -43,9 +43,9 @@ priority_announce("Massive bluespace translocation detected.", "Anomaly Alert") var/list/flashers = list() - for(var/mob/living/carbon/human/M in viewers(TO, null)) - if(M.flash_eyes()) - flashers += M + for(var/mob/living/carbon/C in viewers(TO, null)) + if(C.flash_eyes()) + flashers += C var/y_distance = TO.y - FROM.y var/x_distance = TO.x - FROM.x diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 83f2425156a..51e857ddbe3 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -153,7 +153,7 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) -/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0) +/mob/living/carbon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) var/damage = intensity - check_eye_prot() if(..()) // we've been flashed if(weakeyes) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b137657b148..ee3c44eb666 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -687,7 +687,7 @@ Sorry Giacom. Please don't be mad :( floating = 0 //called when the mob receives a bright flash -/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0) +/mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) if(check_eye_prot() < intensity && (override_blindness_check || !(disabilities & BLIND))) flick("e_flash", flash) return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index cac929c3681..3f601c0810f 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -823,3 +823,6 @@ var/list/ai_list = list() loc = card//Throw AI into the card. src << "You have been downloaded to a mobile storage device. Remote device connection severed." user << "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." + +/mob/living/silicon/ai/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) + return // no eyes, no flashing \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index c3ec3215993..92749a073a2 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -422,12 +422,13 @@ /mob/living/silicon/setEarDamage() return -/mob/living/silicon/check_eye_prot() - return 2 - /mob/living/silicon/proc/GetPhoto() if (aicamera) return aicamera.selectpicture(aicamera) /mob/living/silicon/grabbedby(mob/living/user) - return \ No newline at end of file + return + +/mob/living/silicon/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) + if(affect_silicon) + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index af1520d2d42..4b349ee1ddb 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -173,8 +173,9 @@ if(cleared) src << "--- [class] alarm in [A.name] has been cleared." -/mob/living/simple_animal/drone/check_eye_prot() - return 2 - /mob/living/simple_animal/drone/handle_temperature_damage() return + +/mob/living/simple_animal/drone/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) + if(affect_silicon) + return ..() \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 6a238b39c41..0710e4c7551 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -67,8 +67,8 @@ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/H in viewers(get_turf(holder.my_atom), null)) - H.flash_eyes() + for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) + C.flash_eyes() for(var/i = 1, i <= amount_to_spawn, i++) var/chosen = pick(critters) var/mob/living/simple_animal/hostile/C = new chosen diff --git a/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm b/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm index 49048502ad0..46f1d7a1e74 100644 --- a/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm +++ b/code/modules/reagents/Chemistry-Recipes/Slime_extracts.dm @@ -159,8 +159,8 @@ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - M.flash_eyes() + for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null)) + C.flash_eyes() for(var/i = 1, i <= 4 + rand(1,2), i++) var/chosen = pick(borks) @@ -191,7 +191,7 @@ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) + for(var/mob/living/carbon/M in viewers(get_turf(holder.my_atom), null)) M.flash_eyes() for(var/i = 1, i <= 4 + rand(1,2), i++) From 65f56e146d68c91275dd4fa10750062fde1cbfa0 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sun, 19 Jul 2015 10:31:52 -0500 Subject: [PATCH 26/65] Liberty Station fix, alien whispering fix, plasma statue logging. Fixes the liberty station spawning an SMG without a firing pin by creating an unrestricted variant of it. Added unrestricted L6 and unrestricted bulldog object types for admin spawn since I was already there. Fixes aliens being able to whisper to ghosts. Adds logging to shooting plasma statues. --- code/game/machinery/vending.dm | 2 +- code/game/objects/structures/statues.dm | 2 ++ .../mob/living/carbon/alien/humanoid/alien_powers.dm | 2 +- code/modules/projectiles/guns/projectile/automatic.dm | 7 +++++++ code/modules/projectiles/guns/projectile/shotgun.dm | 3 +++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ba110550f4e..40de63b5c4f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -720,7 +720,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C product_ads = "Float like an astronaut, sting like a bullet!;Express your second ammendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" vend_reply = "Remember the name: Liberation Station!" products = list(/obj/item/weapon/gun/projectile/automatic/pistol/deagle/gold = 2,/obj/item/weapon/gun/projectile/automatic/pistol/deagle/camo = 2, - /obj/item/weapon/gun/projectile/automatic/pistol/m1911 = 2,/obj/item/weapon/gun/projectile/automatic/proto = 2, + /obj/item/weapon/gun/projectile/automatic/pistol/m1911 = 2,/obj/item/weapon/gun/projectile/automatic/proto/unrestricted = 2, /obj/item/weapon/gun/projectile/shotgun/automatic/combat = 2,/obj/item/weapon/gun/projectile/automatic/gyropistol = 1, /obj/item/weapon/gun/projectile/shotgun = 2,/obj/item/weapon/gun/projectile/automatic/ar = 2) premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2,/obj/item/ammo_box/magazine/m50 = 4,/obj/item/ammo_box/magazine/m45 = 2,/obj/item/ammo_box/magazine/m75 = 2) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 00ec5462738..ac81cf34639 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -203,6 +203,8 @@ PlasmaBurn(2500) else if(istype(Proj,/obj/item/projectile/ion)) PlasmaBurn(500) + message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") ..() /obj/structure/statue/plasma/attackby(obj/item/weapon/W, mob/user, params) diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 08e276eb289..7d255e2116b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -94,7 +94,7 @@ Doesn't work on other aliens/AI.*/ action_icon_state = "alien_whisper" /obj/effect/proc_holder/alien/whisper/fire(mob/living/carbon/alien/user) - var/mob/M = input("Select who to whisper to:","Whisper to?",null) as mob in oview(user) + var/mob/living/M = input("Select who to whisper to:","Whisper to?",null) as mob in oview(user) if(!M) return 0 var/msg = sanitize(input("Message:", "Alien Whisper") as text|null) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index a08f9b37260..45660958359 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -15,6 +15,9 @@ mag_type = /obj/item/ammo_box/magazine/smgm9mm pin = null +/obj/item/weapon/gun/projectile/automatic/proto/unrestricted + pin = /obj/item/device/firing_pin + /obj/item/weapon/gun/projectile/automatic/update_icon() ..() overlays.Cut() @@ -130,6 +133,10 @@ fire_delay = 3 pin = /obj/item/device/firing_pin/implant/pindicate +/obj/item/weapon/gun/projectile/automatic/l6_saw/unrestricted + pin = /obj/item/device/firing_pin + + /obj/item/weapon/gun/projectile/automatic/l6_saw/attack_self(mob/user) cover_open = !cover_open user << "You [cover_open ? "open" : "close"] [src]'s cover." diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index cda97e37feb..cc253a9e66e 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -262,6 +262,9 @@ pin = /obj/item/device/firing_pin/implant/pindicate action_button_name = null +/obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/unrestricted + pin = /obj/item/device/firing_pin + /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog/New() ..() update_icon() From 9eced1ac5b0da035dc83e4f1203e2e0afa5c6723 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 19 Jul 2015 21:29:35 +0200 Subject: [PATCH 27/65] Fixes thrown closet opening to not use spawn(). Fixes throw_at() to look nicely for xeno leap by adding the diagonals_first argument. Removes useless gateway/Crossed and gateway/Bumped(). Changes throw_at() to use diagonal directions. I replaced the atom variable "throwpass" with the LETPASSTHROW pass_flags I readded hit_check proc to catch things getting on the thrown thing's tile during its sleep(1) (especially needed for mobs running towards the thing), the only other possibility would've been to add throwing checks in atom/movable/Crossed() (called after every move) and I don't think it'd be worth it. I added the item var "thrownby" to be able to continue to log the thrower of the item when it hits a mob. It removes the need for a thrower argument in throw_impact() and hitby(). --- code/__DEFINES/flags.dm | 11 ++-- code/_onclick/adjacent.dm | 20 ++---- code/game/atoms.dm | 3 +- code/game/atoms_movable.dm | 62 ++++++++++++------- code/game/gamemodes/cult/cult_structures.dm | 6 -- code/game/objects/items.dm | 7 ++- .../structures/crates_lockers/closets.dm | 12 ++-- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/tables_racks.dm | 4 +- code/modules/flufftext/Hallucination.dm | 4 +- .../mob/living/carbon/alien/alien_defense.dm | 4 +- .../carbon/alien/humanoid/caste/hunter.dm | 4 +- .../mob/living/carbon/carbon_defense.dm | 2 +- .../mob/living/carbon/human/human_defense.dm | 2 +- code/modules/mob/living/living.dm | 2 +- code/modules/mob/living/living_defense.dm | 8 +-- code/modules/reagents/reagent_containers.dm | 8 +-- 17 files changed, 79 insertions(+), 82 deletions(-) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 9ddae527eec..0da4f75e1bf 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -42,11 +42,12 @@ the atom/checkpass() proc uses them (tables will call movable atom checkpass(PASSTABLE) for example) */ //flags for pass_flags -#define PASSTABLE 1 -#define PASSGLASS 2 -#define PASSGRILLE 4 -#define PASSBLOB 8 -#define PASSMOB 16 +#define PASSTABLE 1 +#define PASSGLASS 2 +#define PASSGRILLE 4 +#define PASSBLOB 8 +#define PASSMOB 16 +#define LETPASSTHROW 32 //flags for species diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index 20aeb967d29..fb06dacb3d0 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -23,7 +23,7 @@ * If you are in the same turf, always true * If you are vertically/horizontally adjacent, ensure there are no border objects * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. - * Passing through in this case ignores anything with the throwpass flag, such as tables, racks, and morgue trays. + * Passing through in this case ignores anything with the LETPASSTHROW pass flag, such as tables, racks, and morgue trays. */ /turf/Adjacent(var/atom/neighbor, var/atom/target = null) var/turf/T0 = get_turf(neighbor) @@ -80,28 +80,18 @@ /* This checks if you there is uninterrupted airspace between that turf and this one. - This is defined as any dense ON_BORDER object, or any dense object without throwpass. + This is defined as any dense ON_BORDER object, or any dense object without LETPASSTHROW. The border_only flag allows you to not objects (for source and destination squares) */ /turf/proc/ClickCross(var/target_dir, var/border_only, var/target_atom = null) for(var/obj/O in src) - if( !O.density || O == target_atom || O.throwpass) //check if there's a dense object present on the turf - continue // throwpass is used for anything you can click through (or the firedoor special case, see above) + if( !O.density || O == target_atom || (O.pass_flags & LETPASSTHROW)) //check if there's a dense object present on the turf + continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) - if( O.flags&ON_BORDER) // windows have throwpass but are on border, check them first + if( O.flags&ON_BORDER) // windows are on border, check them first if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically return 0 //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones else if( !border_only ) // dense, not on border, cannot pass over return 0 return 1 - -/* - Aside: throwpass does not do what I thought it did originally, and is only used for checking whether or not - a thrown object should stop after already successfully entering a square. Currently the throw code involved - only seems to affect hitting mobs, because the checks performed against objects are already performed when - entering or leaving the square. Since throwpass isn't used on mobs, but only on objects, it is effectively - useless. Throwpass may later need to be removed and replaced with a passcheck (bitfield on movable atom passflags). - - Since I don't want to complicate the click code rework by messing with unrelated systems it won't be changed here. -*/ \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 95c8c95dabf..a524b655a7f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -6,7 +6,6 @@ var/list/fingerprintshidden var/fingerprintslast = null var/list/blood_DNA - var/throwpass = 0 ///Chemistry. var/datum/reagents/reagents = null @@ -260,7 +259,7 @@ its easier to just keep the beam vertical. /atom/proc/fire_act() return -/atom/proc/hitby(atom/movable/AM, mob/thrower, skip, var/hitpush) +/atom/proc/hitby(atom/movable/AM, skip, var/hitpush) if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav. spawn(2) step(AM, turn(AM.dir, 180)) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 8c20fc83801..76e6adc3213 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -93,7 +93,7 @@ /atom/movable/Crossed(atom/movable/AM) return -/atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump(). +/atom/movable/Bump(atom/A, yes) //the "yes" arg is to differentiate our Bump proc from byond's, without it every Bump() call would become a double Bump(). if((A && yes)) if(throwing) throwing = 0 @@ -149,20 +149,20 @@ /atom/movable/proc/checkpass(passflag) return pass_flags&passflag -/atom/movable/proc/throw_impact(atom/hit_atom, mob/thrower) - return hit_atom.hitby(src,thrower) +/atom/movable/proc/throw_impact(atom/hit_atom) + return hit_atom.hitby(src) -/atom/movable/hitby(atom/movable/AM, mob/thrower, skip, var/hitpush = 1) +/atom/movable/hitby(atom/movable/AM, skip, var/hitpush = 1) if(!anchored && hitpush) step(src, AM.dir) return ..() -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=1) +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0) if(!target || !src || (flags & NODROP)) return 0 //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target throwing = 1 - if(spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball + if(spin) //if we don't want the /atom/movable to spin. SpinAnimation(5, 1) var/dist_travelled = 0 @@ -173,6 +173,10 @@ var/dx = (target.x > src.x) ? EAST : WEST var/dy = (target.y > src.y) ? NORTH : SOUTH + var/pure_diagonal = 0 + if(dist_x == dist_y) + pure_diagonal = 1 + if(dist_x <= dist_y) var/olddist_x = dist_x var/olddx = dx @@ -182,25 +186,24 @@ dy = olddx var/error = dist_x/2 - dist_y - - var/throw_range = min(range, dist_x + dist_y) - + var/atom/finalturf = get_turf(target) var/hit = 0 - while(target && (dist_travelled < throw_range || !has_gravity(src))) - // only stop when we've gone the whole distance (or max throw range) and aren't floating, or hit something, or hit the end of the map, or someone picks it up - if(!throwing) - hit = 1 - break + + while(target && ((dist_travelled < range && loc != finalturf) || !has_gravity(src))) //stop if we reached our destination (or max range) and aren't floating + if(!istype(loc, /turf)) hit = 1 break - var/atom/step = get_step(src, (error < 0) ? dy : dx) - error += (error < 0) ? dist_x : -dist_y + var/atom/step = get_step(src, get_dir(src, target)) + if(!pure_diagonal && !diagonals_first) // not a purely diagonal trajectory and we don't want all diagonal moves to be done first + if(error >= 0 && get_dist(src, finalturf) > 1) + step = get_step(src, dx) + error += (error < 0) ? dist_x/2 : -dist_y if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge break Move(step, get_dir(loc, step)) - if(!throwing) + if(!throwing) // we hit something during our move hit = 1 break dist_travelled++ @@ -209,18 +212,29 @@ dist_since_sleep = 0 sleep(1) + if(!dist_since_sleep && hitcheck()) //to catch sneaky things moving on our tile during our sleep(1) + hit = 1 + break + //done throwing, either because it hit something or it finished moving throwing = 0 - for(var/atom/A in get_turf(src)) //looking for our target on the turf we land on. - if(A == target) - hit = 1 - throw_impact(A, thrower) - - if(!hit) // we haven't hit something yet and we still must, let's hit the ground. - throw_impact(get_turf(src),thrower) + if(!hit) + for(var/atom/A in get_turf(src)) //looking for our target on the turf we land on. + if(A == target) + hit = 1 + throw_impact(A) + return 1 + throw_impact(get_turf(src)) // we haven't hit something yet and we still must, let's hit the ground. return 1 +/atom/movable/proc/hitcheck() + for(var/atom/movable/AM in get_turf(src)) + if(AM == src) + continue + if(AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags & ON_BORDER)) + throw_impact(AM) + return 1 //Overlays /atom/movable/overlay diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 60cb2429040..aaac82f87df 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -33,9 +33,3 @@ density = 1 unacidable = 1 anchored = 1.0 - -/obj/effect/gateway/Bumped(mob/M as mob|obj) - return - -/obj/effect/gateway/Crossed(AM as mob|obj) - return \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 09147da601f..2024cca7d7f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -55,6 +55,8 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s var/suittoggled = 0 var/hooded = 0 + var/mob/thrownby = null + /obj/item/mouse_drag_pointer = MOUSE_ACTIVE_POINTER //the icon to indicate this object is being dragged //So items can have custom embedd values @@ -465,13 +467,14 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s if(!findtext(desc, "it looks slightly melted...")) //it looks slightly melted... it looks slightly melted... it looks slightly melted... etc. desc += " it looks slightly melted..." //needs a space at the start, formatting -/obj/item/throw_impact(atom/A, mob/thrower) +/obj/item/throw_impact(atom/A) var/itempush = 1 if(w_class < 4) itempush = 0 //too light to push anything - return A.hitby(src,thrower, 0, itempush) + return A.hitby(src,thrownby, 0, itempush) /obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1) + thrownby = thrower . = ..() throw_speed = initial(throw_speed) //explosions change this. diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 697f718d095..1f00d290936 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -79,12 +79,10 @@ return 1 /obj/structure/closet/proc/dump_contents() - for(var/obj/O in src) O.loc = loc if(throwing) //you keep some momentum when getting out of a thrown closet - spawn(2) //some time to avoid a collision between the obj and the closet/crate - step(O, dir) + step(O, dir) for(var/mob/M in src) M.loc = loc @@ -92,8 +90,9 @@ M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE if(throwing) - spawn(2) - step(M, dir) + step(M, dir) + if(throwing) + throwing = 0 /obj/structure/closet/proc/take_contents() @@ -106,14 +105,13 @@ return 0 if(!can_open()) return 0 - dump_contents() - opened = 1 if(istype(src, /obj/structure/closet/body_bag)) playsound(loc, 'sound/items/zip.ogg', 15, 1, -3) else playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) density = 0 + dump_contents() update_icon() return 1 diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 472f46939f1..87efe8ccffd 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -226,7 +226,7 @@ Crematorium Switch layer = 2.9 var/obj/structure/bodycontainer/connected = null anchored = 1.0 - throwpass = 1 + pass_flags = LETPASSTHROW /obj/structure/tray/Destroy() if(connected) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 02c24df2966..2a61a56a3d5 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -20,7 +20,7 @@ density = 1 anchored = 1.0 layer = 2.8 - throwpass = 1 //You can throw objects over this, despite it's density.") + pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.") var/frame = /obj/structure/table_frame var/framestack = /obj/item/stack/rods var/buildstack = /obj/item/stack/sheet/metal @@ -364,7 +364,7 @@ icon_state = "rack" density = 1 anchored = 1.0 - throwpass = 1 //You can throw objects over this, despite it's density. + pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density. var/health = 5 /obj/structure/rack/ex_act(severity, target) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 04c1128c9fb..c1a695be39c 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -191,10 +191,10 @@ Gunshots/explosions/opening doors/less rare audio (done) xeno = new(pump.loc,target) sleep(10) xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) - xeno.throw_at(target,7,1) + xeno.throw_at(target,7,1, spin = 0, diagonals_first = 1) sleep(10) xeno.update_icon("alienh_leap",'icons/mob/alienleap.dmi',-32,-32) - xeno.throw_at(pump,7,1) + xeno.throw_at(pump,7,1, spin = 0, diagonals_first = 1) sleep(10) var/xeno_name = xeno.name target << "[xeno_name] begins climbing into the ventilation system..." diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index e217683f129..1684d948211 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/hitby(atom/movable/AM, mob/thrower) - ..(AM, thrower, skip = 1) +/mob/living/carbon/alien/hitby(atom/movable/AM) + ..(AM, skip = 1) /*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other. diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index e27983fd18d..61544e0f8ee 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -82,7 +82,7 @@ else //Maybe uses plasma in the future, although that wouldn't make any sense... leaping = 1 update_icons() - throw_at(A,MAX_ALIEN_LEAP_DIST,1, spin=0) + throw_at(A,MAX_ALIEN_LEAP_DIST,1, spin=0, diagonals_first = 1) leaping = 0 update_icons() @@ -113,8 +113,6 @@ update_canmove() - - /mob/living/carbon/alien/humanoid/float(on) if(leaping) return diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 24f9192cca3..0af1f998eb7 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/hitby(atom/movable/AM, mob/thrower, skip) +/mob/living/carbon/hitby(atom/movable/AM, skip) if(!skip) //ugly, but easy if(in_throw_mode && !get_active_hand()) //empty active hand and we're in throw mode if(canmove && !restrained()) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index f1fa58c8509..392d741ae41 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -455,7 +455,7 @@ emp_act else ..() -/mob/living/carbon/human/hitby(atom/movable/AM, mob/thrower) +/mob/living/carbon/human/hitby(atom/movable/AM) if(throw_speed >= EMBED_THROWSPEED_THRESHOLD) if(istype(AM, /obj/item)) var/obj/item/I = AM diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4e47819cd1a..2bdfdb8dba2 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -52,7 +52,7 @@ Sorry Giacom. Please don't be mad :( //Generic Bump(). Override MobBump() and ObjBump() instead of this. /mob/living/Bump(atom/A, yes) - if(..()) //bumped by a thrown /atom/movable + if(..()) //we are thrown onto something return if (buckled || !yes || now_pushing) return diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 05711d54ae1..5e219f90060 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -44,13 +44,13 @@ else return 0 -/mob/living/throw_impact(atom/hit_atom, mob/thrower) +/mob/living/throw_impact(atom/hit_atom) . = ..() if(hit_atom.density) Weaken(1) take_organ_damage(10) -/mob/living/hitby(atom/movable/AM, mob/thrower) +/mob/living/hitby(atom/movable/AM) if(istype(AM, /obj/item)) var/obj/item/I = AM var/zone = ran_zone("chest", 65)//Hits a random part of the body, geared towards the chest @@ -77,10 +77,10 @@ "[src] has been hit by [I].") var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) apply_damage(I.throwforce, dtype, zone, armor, I) + if(I.thrownby) + add_logs(I.thrownby, src, "hit", object="[AM]") else playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) - if(thrower) - add_logs(thrower, src, "hit", object="[AM]") return ..() /mob/living/mech_melee_attack(obj/mecha/M) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index c4c24929e39..b76994178fe 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -79,7 +79,7 @@ reagents.handle_reactions() ..() -/obj/item/weapon/reagent_containers/throw_impact(atom/target,mob/thrower) +/obj/item/weapon/reagent_containers/throw_impact(atom/target) . = ..() if(!reagents.total_volume || !spillable) @@ -96,11 +96,11 @@ R += A.id + " (" R += num2text(A.volume) + ")," - if(thrower) - add_logs(thrower, M, "splashed", object="[R]") + if(thrownby) + add_logs(thrownby, M, "splashed", object="[R]") reagents.reaction(target, TOUCH) - else if((target.CanPass(src, get_turf(src))) && thrower && thrower.mind && thrower.mind.assigned_role == "Bartender") + else if((target.CanPass(src, get_turf(src))) && thrownby && thrownby.mind && thrownby.mind.assigned_role == "Bartender") visible_message("[src] lands onto the [target.name] without spilling a single drop.") return From a9bc2ac562fc824247002062a1e777ad835382b9 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Mon, 20 Jul 2015 05:36:08 +1000 Subject: [PATCH 28/65] changelog --- html/changelog.html | 16 ++++++++++++++-- html/changelogs/.all_changelog.yml | 19 +++++++++++++++++-- html/changelogs/phil235-MechRefactoring.yml | 4 ---- 3 files changed, 31 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/phil235-MechRefactoring.yml diff --git a/html/changelog.html b/html/changelog.html index 83389ce270f..b902098032b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,20 @@ -->
+

20 July 2015

+

KorPaheron updated:

+
    +
  • Added the Multiverse Sword, a new wizard artifact that can summon clones of yourself from other universes, allowing for dangerous amounts of recursion.
  • +
+

phil235 updated:

+
    +
  • Mechs no longer use object verbs and the exosuit interface tab. They now use action buttons. Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window. Mechs get two special alerts when their battery or health is low. Mechs now properly consume energy when moving and having their lights on. Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill).
  • +
  • Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window.
  • +
  • Mechs get two special alerts when their battery or health is low.
  • +
  • Mechs now properly consume energy when moving and having their lights on.
  • +
  • Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill).
  • +
+

19 July 2015

Gun Hog updated:

    @@ -88,8 +102,6 @@

    Steelpoint updated:

    • Reduced weight of Sechailer, it now fits in boxes.
    • -
    • Increased armor values of HoS, ERT and DS suits.
    • -
    • Revolver bullets now have armor penetration.

    phil updated:

      diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 9561405c74d..82f6d3ee089 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1255,8 +1255,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. said, to allow them to better impersonate their victim's speech patterns Steelpoint: - tweak: Reduced weight of Sechailer, it now fits in boxes. - - tweak: Increased armor values of HoS, ERT and DS suits. - - rscadd: Revolver bullets now have armor penetration. phil: - tweak: Smoke and foam touch reactions gets buffed. - rscadd: Reagent dispensers (watertank, fueltank) tells you how much reagents they @@ -1276,3 +1274,20 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. will upload. MMMiracles: - soundadd: Adds a TWANG sound effect when hitting things with a guitar. +2015-07-20: + KorPaheron: + - rscadd: Added the Multiverse Sword, a new wizard artifact that can summon clones + of yourself from other universes, allowing for dangerous amounts of recursion. + phil235: + - tweak: Mechs no longer use object verbs and the exosuit interface tab. They now + use action buttons. Mechs now have a cycle equipment action button to change + weapon faster than by using the view stats window. Mechs get two special alerts + when their battery or health is low. Mechs now properly consume energy when + moving and having their lights on. Using a mech tool that takes time to act + now shows a progress bar (e.g. mech drill). + - rscadd: Mechs now have a cycle equipment action button to change weapon faster + than by using the view stats window. + - rscadd: Mechs get two special alerts when their battery or health is low. + - tweak: Mechs now properly consume energy when moving and having their lights on. + - rscadd: Using a mech tool that takes time to act now shows a progress bar (e.g. + mech drill). diff --git a/html/changelogs/phil235-MechRefactoring.yml b/html/changelogs/phil235-MechRefactoring.yml deleted file mode 100644 index c8e188f6fc5..00000000000 --- a/html/changelogs/phil235-MechRefactoring.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: phil235 -delete-after: True -changes: - - rscadd: "Mechs no longer use object verbs and the exosuit interface tab. They now use action buttons. Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window. Mechs get two special alerts when their battery or health is low. Mechs now properly consume energy when moving and having their lights on. Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill)." From 1bda2b65193e4ed10ccd005059e95482ac1ba6a6 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 19 Jul 2015 21:57:51 +0200 Subject: [PATCH 29/65] I hate fixing merge conflicts. --- code/modules/mob/living/living_defines.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 9dfe833a9e6..56c0426c5bc 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -45,6 +45,8 @@ var/list/pipes_shown = list() var/last_played_vent + var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. + var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" var/last_bumped = 0 From 2833f59f5fe3504ca61f6f7def9756eb2fcb4c81 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 19 Jul 2015 22:16:09 +0200 Subject: [PATCH 30/65] A typo and a forgotten thing to do. --- code/game/objects/items/toys.dm | 2 +- html/changelogs/phil235-CatchThrownPieFix.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 97fe27c8288..a340ca49274 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -77,7 +77,7 @@ for(var/atom/A in get_turf(hit_atom)) reagents.reaction(A) icon_state = "burst" - del(src) // Not qdel, because it would burst multiple times + qdel(src) /obj/item/toy/balloon/update_icon() if(src.reagents.total_volume >= 1) diff --git a/html/changelogs/phil235-CatchThrownPieFix.yml b/html/changelogs/phil235-CatchThrownPieFix.yml index 8b8f21081c2..4f467b01345 100644 --- a/html/changelogs/phil235-CatchThrownPieFix.yml +++ b/html/changelogs/phil235-CatchThrownPieFix.yml @@ -5,4 +5,4 @@ author: phil235 delete-after: True changes: - - tweak: "Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed. + - tweak: "Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed." From d2f591432fa4b1fa6d9f5041a018060c2b3b040e Mon Sep 17 00:00:00 2001 From: Jim Boonie Date: Mon, 20 Jul 2015 15:22:52 +1200 Subject: [PATCH 31/65] Adds resist hotkeys for borgs and humans. --- html/changelogs/freerealestate - RESIST.yml | 6 +++ interface/interface.dm | 5 +++ interface/skin.dmf | 42 +++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 html/changelogs/freerealestate - RESIST.yml diff --git a/html/changelogs/freerealestate - RESIST.yml b/html/changelogs/freerealestate - RESIST.yml new file mode 100644 index 00000000000..f3dde428797 --- /dev/null +++ b/html/changelogs/freerealestate - RESIST.yml @@ -0,0 +1,6 @@ +author: freerealestate + +delete-after: True + +changes: + - rscadd: "Added resist hotkeys for borgs and humans. With hotkeys mode, use CTRL+C or C as a human and CTRL+C, C or END as a borg. With hotkeys mode off, use CTRL+C as a human and END as a borg." diff --git a/interface/interface.dm b/interface/interface.dm index a24e86cd3aa..b46c3856ccb 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -91,6 +91,7 @@ Hotkey-Mode: (hotkey-mode must be on) \tm = me \tt = say \to = OOC +\tc = resist \tx = swap-hand \tz = activate held object (or y) \tf = cycle-intents-left @@ -110,6 +111,7 @@ Any-Mode: (hotkey doesn't need to be on) \tCtrl+q = drop \tCtrl+e = equip \tCtrl+r = throw +\tCtrl+c = resist \tCtrl+x = swap-hand \tCtrl+z = activate held object (or Ctrl+y) \tCtrl+f = cycle-intents-left @@ -140,6 +142,7 @@ Hotkey-Mode: (hotkey-mode must be on) \tq = unequip active module \tt = say \tx = cycle active modules +\tc = resist \tz = activate held object (or y) \tf = cycle-intents-left \tg = cycle-intents-right @@ -157,6 +160,7 @@ Any-Mode: (hotkey doesn't need to be on) \tCtrl+w = up \tCtrl+q = unequip active module \tCtrl+x = cycle active modules +\tCtrl+c = resist \tCtrl+z = activate held object (or Ctrl+y) \tCtrl+f = cycle-intents-left \tCtrl+g = cycle-intents-right @@ -166,6 +170,7 @@ Any-Mode: (hotkey doesn't need to be on) \tCtrl+4 = toggle intents \tDEL = pull \tINS = toggle intents +\tEND = resist \tPGUP = cycle active modules \tPGDN = activate held object "} diff --git a/interface/skin.dmf b/interface/skin.dmf index 68fafe4a6b0..c53f9e001cc 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -15,6 +15,10 @@ macro "borghotkeymode" name = "SOUTHEAST" command = ".southeast" is-disabled = false + elem + name = "SOUTHWEST" + command = "resist" + is-disabled = false elem name = "NORTHWEST" command = "unequip-module" @@ -99,6 +103,14 @@ macro "borghotkeymode" name = "CTRL+A+REP" command = ".west" is-disabled = false + elem + name = "C" + command = "resist" + is-disabled = false + elem + name = "CTRL+C" + command = "resist" + is-disabled = false elem name = "D+REP" command = ".east" @@ -297,6 +309,10 @@ macro "macro" name = "CTRL+A+REP" command = ".west" is-disabled = false + elem + name = "CTRL+C" + command = "resist" + is-disabled = false elem name = "CTRL+D+REP" command = ".east" @@ -483,6 +499,14 @@ macro "hotkeymode" name = "CTRL+A+REP" command = ".west" is-disabled = false + elem + name = "C" + command = "resist" + is-disabled = false + elem + name = "CTRL+C" + command = "resist" + is-disabled = false elem name = "D+REP" command = ".east" @@ -637,6 +661,10 @@ macro "borgmacro" name = "SOUTHEAST" command = ".southeast" is-disabled = false + elem + name = "SOUTHWEST" + command = "resist" + is-disabled = false elem name = "NORTHWEST" command = "unequip-module" @@ -701,6 +729,10 @@ macro "borgmacro" name = "CTRL+A+REP" command = ".west" is-disabled = false + elem + name = "CTRL+C" + command = "resist" + is-disabled = false elem name = "CTRL+D+REP" command = ".east" @@ -1201,6 +1233,8 @@ window "chemdispenser" keep-aspect = false align = center text-wrap = false + allow-html = false + letterbox = true elem "eject" type = BUTTON pos = 264,4 @@ -1367,6 +1401,8 @@ window "chemdispenser" keep-aspect = false align = center text-wrap = false + allow-html = false + letterbox = true elem "child1" type = CHILD pos = 0,40 @@ -1488,6 +1524,8 @@ window "chemdispenser_reagents" keep-aspect = false align = center text-wrap = false + allow-html = false + letterbox = true window "mainwindow" elem "mainwindow" @@ -1698,6 +1736,8 @@ window "mapwindow" on-size = "" icon-size = 0 text-mode = false + letterbox = true + zoom = 0 on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" on-hide = ".winset\"mainwindow.mainvsplit.left=\"" style = "" @@ -2226,4 +2266,6 @@ window "infowindow" on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" on-tab = "" + prefix-color = none + suffix-color = none From c2a8cf5e76fa75b1c7194f5d0c9767450e52a4d4 Mon Sep 17 00:00:00 2001 From: Jim Boonie Date: Mon, 20 Jul 2015 15:30:32 +1200 Subject: [PATCH 32/65] Removes a couple of inadvertent changes --- interface/skin.dmf | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/interface/skin.dmf b/interface/skin.dmf index c53f9e001cc..63e45aa4fd0 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1233,8 +1233,6 @@ window "chemdispenser" keep-aspect = false align = center text-wrap = false - allow-html = false - letterbox = true elem "eject" type = BUTTON pos = 264,4 @@ -1401,8 +1399,6 @@ window "chemdispenser" keep-aspect = false align = center text-wrap = false - allow-html = false - letterbox = true elem "child1" type = CHILD pos = 0,40 @@ -1524,8 +1520,6 @@ window "chemdispenser_reagents" keep-aspect = false align = center text-wrap = false - allow-html = false - letterbox = true window "mainwindow" elem "mainwindow" @@ -1736,8 +1730,6 @@ window "mapwindow" on-size = "" icon-size = 0 text-mode = false - letterbox = true - zoom = 0 on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" on-hide = ".winset\"mainwindow.mainvsplit.left=\"" style = "" @@ -2266,6 +2258,4 @@ window "infowindow" on-show = ".winset\"rpane.infob.is-visible=true;rpane.browseb.is-visible=true?rpane.infob.pos=130,0:rpane.infob.pos=65,0 rpane.textb.is-visible=true rpane.infob.is-checked=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=infowindow\"" on-hide = ".winset\"rpane.infob.is-visible=false;rpane.browseb.is-visible=true?rpane.browseb.is-checked=true rpane.rpanewindow.left=browserwindow:rpane.textb.is-visible=true rpane.rpanewindow.pos=0,30 rpane.rpanewindow.size=0x0 rpane.rpanewindow.left=\"" on-tab = "" - prefix-color = none - suffix-color = none From ec3677da2d70d6c54507f89eb8d88d650ce7505e Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Sun, 19 Jul 2015 23:20:04 -0600 Subject: [PATCH 33/65] Fixes Reset and Purge having "This is a bug." law on examine No reason to have this string as far as I can tell. --- code/game/objects/items/weapons/AI_modules.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index eaf995a9285..34d89f2bf24 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -227,7 +227,6 @@ AI MODULES var/targetName = "name" desc = "An AI Module for removing all non-core laws." origin_tech = "programming=3;materials=4" - laws = list("This is a bug.") //This won't give the AI a message reading "these are now your laws: 1. this is a bug" because this list is only read in aiModule's subtypes. bypass_law_amt_check = 1 /obj/item/weapon/aiModule/reset/transmitInstructions(mob/living/silicon/ai/target, mob/sender) From 0eecfb239a57b15b5d34fe63047526e623892228 Mon Sep 17 00:00:00 2001 From: Jim Boonie Date: Mon, 20 Jul 2015 17:47:06 +1200 Subject: [PATCH 34/65] Removes End resist for cyborgs --- interface/interface.dm | 1 - interface/skin.dmf | 4 ---- 2 files changed, 5 deletions(-) diff --git a/interface/interface.dm b/interface/interface.dm index b46c3856ccb..348d110e134 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -170,7 +170,6 @@ Any-Mode: (hotkey doesn't need to be on) \tCtrl+4 = toggle intents \tDEL = pull \tINS = toggle intents -\tEND = resist \tPGUP = cycle active modules \tPGDN = activate held object "} diff --git a/interface/skin.dmf b/interface/skin.dmf index 63e45aa4fd0..cc847abc342 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -15,10 +15,6 @@ macro "borghotkeymode" name = "SOUTHEAST" command = ".southeast" is-disabled = false - elem - name = "SOUTHWEST" - command = "resist" - is-disabled = false elem name = "NORTHWEST" command = "unequip-module" From 99c5d75cef2454dce3279c2d2d080da29517c2d0 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 20 Jul 2015 06:07:17 -0500 Subject: [PATCH 35/65] Adds check for firer being null --- code/game/objects/structures/statues.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index ac81cf34639..10e5d804c56 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -203,8 +203,12 @@ PlasmaBurn(2500) else if(istype(Proj,/obj/item/projectile/ion)) PlasmaBurn(500) - message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") + if(Proj.firer) + message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") + else + message_admins("Plasma statue ignited by [Proj]. No known firer.(?) (FLW) in ([x],[y],[z] - JMP)",0,1) + log_game("Plasma statue ignited by [Proj] in ([x],[y],[z]). No known firer.") ..() /obj/structure/statue/plasma/attackby(obj/item/weapon/W, mob/user, params) From 19ef482d877dda816756ae65080d53aecda00551 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Sun, 19 Jul 2015 01:46:27 -0700 Subject: [PATCH 36/65] Finishes carnmc's shuttle rotation feature. Under carn shuttles, When shuttles dock at a docking port that is not the same direction as them, they rotate their bounding box, and they do magic i don't understand to rotate where the turfs get placed. But it doesn't rotate the items or smoothwall or handle pixel_xy or any of that. This fixes that. Shuttle rotation will call /atom/proc/shuttleRotate(degrees) Default behavior handles most cases, and overrides handle edge cases. Shuttle walls don't smooth wall or obey directions, so I just rotate their icon using matrix transform, its dirty but it works. See: https://tgstation13.org/msoshit/powrightinthekisser.png or https://tgstation13.org/msoshit/fuckingshuttles.png --- code/__HELPERS/game.dm | 36 ++++++++ code/game/turfs/simulated/walls_misc.dm | 8 +- code/modules/awaymissions/gateway.dm | 4 +- code/modules/mob/mob.dm | 6 +- code/modules/power/gravitygenerator.dm | 4 + code/modules/shuttle/shuttle.dm | 112 +++++++++++++++--------- 6 files changed, 124 insertions(+), 46 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 8a0b055d4b2..230a77ba1ae 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -379,3 +379,39 @@ var/dest_y = src_y + distance*cos(rotation); return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) + +/proc/getRotationFromDirs(dir1, dir2) + return getDegreesFromDir(dir2)-getDegreesFromDir(dir1) + +/proc/getDirFromRotation(rotation, olddir) + return getDirFromDegrees(rotation+getDegreesFromDir(olddir)) + +/proc/getDirFromDegrees(degrees) + if (degrees < 0) + degrees += 360 + if (degrees >= 360) + degrees %= 360 + if (degrees == 360) + degrees = 0 + switch(degrees) + if (0) + return NORTH + if (90) + return EAST + if (180) + return SOUTH + if (270) + return WEST + + +/proc/getDegreesFromDir(dir) + switch(dir) + if (NORTH) + return 0 + if (EAST) + return 90 + if (SOUTH) + return 180 + if (WEST) + return 270 + return 0 \ No newline at end of file diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 4d664e2b4ba..7b3e20a43ea 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -62,4 +62,10 @@ T.color = color if(T.dir != dir) T.dir = dir - return T \ No newline at end of file + return T + +//why don't shuttle walls habe smoothwall? now i gotta do rotation the dirty way +/turf/simulated/wall/shuttle/shuttleRotate(rotation) + var/matrix/M = matrix(transform) + M.Turn(rotation) + transform = M \ No newline at end of file diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 4b6c9ff0881..89e24aa3672 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -21,7 +21,9 @@ return icon_state = "off" - +//prevents shuttles attempting to rotate this since it messes up sprites +/obj/machinery/gateway/shuttleRotate() + return //this is da important part wot makes things go /obj/machinery/gateway/centerstation diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6e9e8ccd996..59b83064827 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -963,4 +963,8 @@ var/list/slot_equipment_priority = list( \ spell.action.background_icon_state = spell.action_background_icon_state if(isliving(src)) spell.action.Grant(src) - return \ No newline at end of file + return + +//override to avoid rotating pixel_xy on mobs +/mob/shuttleRotate(rotation) + dir = getDirFromRotation(rotation, dir) \ No newline at end of file diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 5c63a5cc097..be09fdadd38 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -36,6 +36,10 @@ var/const/GRAV_NEEDS_WRENCH = 3 ..() icon_state = "[get_status()]_[sprite_number]" +//prevents shuttles attempting to rotate this since it messes up sprites +/obj/machinery/gravity_generator/shuttleRotate() + return + /obj/machinery/gravity_generator/proc/get_status() return "off" diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index dfbb6085368..eeaad37ead2 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -22,7 +22,8 @@ /obj/docking_port/Destroy() return QDEL_HINT_LETMELIVE - +/obj/docking_port/shuttleRotate() + return //we don't rotate with shuttles via this code. //returns a list(x0,y0, x1,y1) where points 0 and 1 are bounding corners of the projected rectangle /obj/docking_port/proc/return_coords(_x, _y, _dir) if(!_dir) @@ -267,6 +268,22 @@ else WARNING("shuttle \"[id]\" could not enter transit space. S0=[S0 ? S0.id : "null"] S1=[S1 ? S1.id : "null"]") +//default shuttleRotate +/atom/proc/shuttleRotate(rotation) + dir = getDirFromRotation(rotation, dir) + + //we need to rotate the pixel offsets too. + if (pixel_x || pixel_y) + if (rotation < 0) + rotation += 360 + for (var/turntimes=rotation/90;turntimes>0;turntimes--) + var/oldPX = pixel_x + var/oldPY = pixel_y + pixel_x = oldPY + pixel_y = (oldPX*(-1)) + + + //this is the main proc. It instantly moves our mobile port to stationary port S1 //it handles all the generic behaviour, such as sanity checks, closing doors on the shuttle, stunning mobs, etc /obj/docking_port/mobile/proc/dock(obj/docking_port/stationary/S1) @@ -315,6 +332,18 @@ if(!T1) continue + + //lighting stuff + T1.redraw_lighting() + SSair.remove_from_active(T1) + T1.CalculateAdjacentTurfs() + SSair.add_to_active(T1,1) + + T0.redraw_lighting() + SSair.remove_from_active(T0) + T0.CalculateAdjacentTurfs() + SSair.add_to_active(T0,1) + T0.copyTurf(T1) areaInstance.contents += T1 @@ -324,54 +353,49 @@ Ts1.copy_air_with_tile(T0) //move mobile to new location - loc = S1.loc - dir = S1.dir - //move all objects - for(var/obj/O in T0) - if(O.invisibility >= 101) - continue - if(O == T0.lighting_object) - continue - O.loc = T1 - //close open doors - if(istype(O, /obj/machinery/door)) - var/obj/machinery/door/Door = O - spawn(-1) - if(Door) - Door.close() - for(var/mob/M in T0) - if(!M.move_on_shuttle) - continue - M.loc = T1 + for(var/atom/movable/AM in T0) + if (dir != S1.dir) + AM.shuttleRotate(getRotationFromDirs(dir,S1.dir)) - //docking turbulence - if(M.client) - spawn(0) - if(M.buckled) - shake_camera(M, 2, 1) // turn it down a bit come on - else - shake_camera(M, 7, 1) - if(istype(M, /mob/living/carbon)) - if(!M.buckled) - M.Weaken(3) + if (istype(AM,/obj)) + var/obj/O = AM + if(O.invisibility >= 101) + continue + if(O == T0.lighting_object) + continue + O.loc = T1 + + //close open doors + if(istype(O, /obj/machinery/door)) + var/obj/machinery/door/Door = O + spawn(-1) + if(Door) + Door.close() + else if (istype(AM,/mob)) + var/mob/M = AM + if(!M.move_on_shuttle) + continue + M.loc = T1 + + //docking turbulence + if(M.client) + spawn(0) + if(M.buckled) + shake_camera(M, 2, 1) // turn it down a bit come on + else + shake_camera(M, 7, 1) + if(istype(M, /mob/living/carbon)) + if(!M.buckled) + M.Weaken(3) T0.ChangeTurf(turf_type) - - //air system updates - for(var/turf/T1 in L1) - T1.redraw_lighting() - SSair.remove_from_active(T1) - T1.CalculateAdjacentTurfs() - SSair.add_to_active(T1,1) - - for(var/turf/T0 in L0) - T0.redraw_lighting() - SSair.remove_from_active(T0) - T0.CalculateAdjacentTurfs() - SSair.add_to_active(T0,1) + if (dir != S1.dir) + T1.shuttleRotate(getRotationFromDirs(dir,S1.dir)) + loc = S1.loc + dir = S1.dir /* if(istype(S1, /obj/docking_port/stationary/transit)) @@ -381,6 +405,8 @@ T.update_icon() */ + + /obj/docking_port/mobile/proc/findTransitDock() var/obj/docking_port/stationary/transit/T = SSshuttle.getDock("[id]_transit") if(T && !canDock(T)) From 7f58d930bbabbdac7efad1952886884d6f42b3af Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Sun, 19 Jul 2015 10:58:33 -0700 Subject: [PATCH 37/65] Shuttle Rotation Tweaks This should fix shuttle walls not rotating back to their old state correctly when the shuttle docks elsewhere. Also uses built in procs and caches the calculated rotation angle to improve shuttle docking speed by not calculating it again for every object. This should also ensure that diagonal objects rotate correctly, rather then snapping back to a cardinal direction. --- code/__HELPERS/game.dm | 35 ------------------------- code/game/turfs/simulated/walls_misc.dm | 7 ++++- code/modules/mob/mob.dm | 2 +- code/modules/shuttle/shuttle.dm | 17 ++++++++---- 4 files changed, 19 insertions(+), 42 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 230a77ba1ae..21626590306 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -380,38 +380,3 @@ return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) -/proc/getRotationFromDirs(dir1, dir2) - return getDegreesFromDir(dir2)-getDegreesFromDir(dir1) - -/proc/getDirFromRotation(rotation, olddir) - return getDirFromDegrees(rotation+getDegreesFromDir(olddir)) - -/proc/getDirFromDegrees(degrees) - if (degrees < 0) - degrees += 360 - if (degrees >= 360) - degrees %= 360 - if (degrees == 360) - degrees = 0 - switch(degrees) - if (0) - return NORTH - if (90) - return EAST - if (180) - return SOUTH - if (270) - return WEST - - -/proc/getDegreesFromDir(dir) - switch(dir) - if (NORTH) - return 0 - if (EAST) - return 90 - if (SOUTH) - return 180 - if (WEST) - return 270 - return 0 \ No newline at end of file diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 7b3e20a43ea..e2a05273664 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -62,10 +62,15 @@ T.color = color if(T.dir != dir) T.dir = dir + T.transform = transform return T +/turf/simulated/wall/shuttle/copyTurf(turf/T) + . = ..() + T.transform = transform + //why don't shuttle walls habe smoothwall? now i gotta do rotation the dirty way /turf/simulated/wall/shuttle/shuttleRotate(rotation) - var/matrix/M = matrix(transform) + var/matrix/M = transform M.Turn(rotation) transform = M \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 59b83064827..b76f3056cc0 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -967,4 +967,4 @@ var/list/slot_equipment_priority = list( \ //override to avoid rotating pixel_xy on mobs /mob/shuttleRotate(rotation) - dir = getDirFromRotation(rotation, dir) \ No newline at end of file + dir = angle2dir(rotation+dir2angle(dir)) \ No newline at end of file diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index eeaad37ead2..600795a4f5a 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -270,7 +270,7 @@ //default shuttleRotate /atom/proc/shuttleRotate(rotation) - dir = getDirFromRotation(rotation, dir) + dir = angle2dir(rotation+dir2angle(dir)) //we need to rotate the pixel offsets too. if (pixel_x || pixel_y) @@ -313,6 +313,13 @@ var/list/L0 = return_ordered_turfs(x, y, z, dir, areaInstance) var/list/L1 = return_ordered_turfs(S1.x, S1.y, S1.z, S1.dir) + var/rotation = dir2angle(S1.dir)-dir2angle(dir) + if ((rotation % 90) != 0) + rotation += (rotation % 90) //diagonal rotations not allowed, round up + rotation = SimplifyDegrees(rotation) + + + //remove area surrounding docking port if(areaInstance.contents.len) var/area/A0 = locate("[area_type]") @@ -357,8 +364,8 @@ for(var/atom/movable/AM in T0) - if (dir != S1.dir) - AM.shuttleRotate(getRotationFromDirs(dir,S1.dir)) + if (rotation) + AM.shuttleRotate(rotation) if (istype(AM,/obj)) var/obj/O = AM @@ -392,8 +399,8 @@ M.Weaken(3) T0.ChangeTurf(turf_type) - if (dir != S1.dir) - T1.shuttleRotate(getRotationFromDirs(dir,S1.dir)) + if (rotation) + T1.shuttleRotate(rotation) loc = S1.loc dir = S1.dir From bc5eac33a8ad9cb8d0d721a7f353b8ff57c0d262 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Mon, 20 Jul 2015 09:02:46 -0600 Subject: [PATCH 38/65] Needs a check here to let reset and purge be used. --- code/game/objects/items/weapons/AI_modules.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 34d89f2bf24..89b86d8b737 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -39,7 +39,7 @@ AI MODULES //The proc other things should be calling /obj/item/weapon/aiModule/proc/install(mob/living/silicon/reciever, mob/user) - if(!laws.len || laws[1] == "") //So we don't loop trough an empty list and end up with runtimes. + if(!bypass_law_amt_check && (!laws.len || laws[1] == "")) //So we don't loop trough an empty list and end up with runtimes. user << "ERROR: No laws found on board." return From 42384019f503c3d8f7d4a4eeb202d3d98235c60c Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Mon, 20 Jul 2015 09:20:00 -0600 Subject: [PATCH 39/65] Makes Body Swap a bit cheaper It turns out it wasn't as terrible of a game changer that some people expected it to be. Too difficult to use for it's cost. So I'm making it cheaper --- code/game/gamemodes/changeling/powers/absorb.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 6a05e76d97a..dd5229b7c2c 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -133,9 +133,8 @@ desc = "We force ourselves into the body of another form, pushing their consciousness into the form we left behind." helptext = "We will bring all our abilities with us, but we will lose our old form DNA in exchange for the new one. The process will seem suspicious to any observers." chemical_cost = 40 - dna_cost = 2 + dna_cost = 1 req_human = 1 //Monkeys can't grab - genetic_damage = 50 /obj/effect/proc_holder/changeling/swap_form/can_sting(mob/living/carbon/user) if(!..()) From 7e8664d2170636f76919f22cc9a9190d99dc7e94 Mon Sep 17 00:00:00 2001 From: Dorsisdwarf Date: Mon, 20 Jul 2015 16:56:47 +0100 Subject: [PATCH 40/65] Buffs maint, readds maint bar, fixes toxins test site --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 271 +++++++++++------- 1 file changed, 171 insertions(+), 100 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 7c3a2ba5ebd..c43a83c3ef7 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -855,8 +855,8 @@ "aqw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqx" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqy" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"aqz" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2) -"aqA" = (/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"aqz" = (/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"aqA" = (/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqB" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqC" = (/turf/simulated/wall,/area/maintenance/fpmaint) "aqD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -965,7 +965,7 @@ "asC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall,/area/maintenance/fpmaint2) "asD" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/space) "asE" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/space) -"asF" = (/obj/machinery/atmospherics/components/binary/valve,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"asF" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asG" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asH" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 35},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asI" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1028,7 +1028,7 @@ "atN" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/circuitboard/operating,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atO" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atP" = (/obj/item/weapon/airlock_painter,/obj/structure/lattice,/obj/structure/closet,/turf/space,/area/space) -"atQ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"atQ" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bedsheet,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atR" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atS" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "atT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -1079,7 +1079,7 @@ "auM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "auN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/fpmaint) "auO" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"auP" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"auP" = (/obj/machinery/computer/slot_machine{balance = 15; money = 500},/obj/item/weapon/coin/iron,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/diamond,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "auQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/wall,/area/maintenance/fpmaint) "auR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "auS" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -3772,7 +3772,7 @@ "buB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "buC" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "buD" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) -"buE" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"buE" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/toy/sword,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "buF" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/quartermaster/storage) "buG" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) "buH" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/quartermaster/storage) @@ -4660,6 +4660,7 @@ "bLF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/medical/virology) "bLG" = (/turf/simulated/wall/r_wall,/area/medical/virology) "bLH" = (/turf/simulated/wall,/area/medical/virology) +"bLI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/noticeboard{dir = 8; pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bLJ" = (/obj/structure/sign/biohazard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/medical/virology) "bLK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Xenobiology Maintenance"; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) @@ -4743,6 +4744,7 @@ "bNl" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/mixing) "bNm" = (/obj/item/target,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/toxins/test_area) "bNn" = (/obj/machinery/light_construct{dir = 8},/turf/simulated/floor/plating,/area/construction) +"bNo" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bNp" = (/obj/machinery/light_construct{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction) "bNq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/construction) "bNr" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -4939,6 +4941,7 @@ "bRa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{name = "Break Room"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRc" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) +"bRd" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bRe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/firealarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRg" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera{c_tag = "Virology Module"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -5289,7 +5292,7 @@ "bXN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/medical/virology) "bXO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bXP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bXQ" = (/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced/tinted/fulltile,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"bXQ" = (/obj/item/weapon/airalarm_electronics,/obj/item/weapon/circuitboard/seed_extractor,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bXR" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXS" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXT" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) @@ -5479,7 +5482,7 @@ "cbv" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cbw" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cbx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cby" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cby" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) "cbz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5533,7 +5536,7 @@ "ccx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccy" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccz" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/maintenance/asmaint) -"ccA" = (/obj/structure/disposalpipe/segment,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"ccA" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) "ccB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccC" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccD" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/l3closet,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5581,7 +5584,7 @@ "cdt" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cdu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cdv" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cdw" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/aft) +"cdw" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/fpmaint2) "cdx" = (/obj/structure/closet/wardrobe/black,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/aft) "cdy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft) "cdz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5615,7 +5618,7 @@ "ceb" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/trunk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cec" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ced" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cee" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/general/hidden{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cee" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cef" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5667,12 +5670,12 @@ "cfb" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cfc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cfd" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cfe" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cfe" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cff" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfg" = (/obj/structure/disposalpipe/junction{dir = 2; icon_state = "pipe-y"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfh" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfi" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cfj" = (/obj/structure/stool{pixel_y = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cfj" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cfk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/asmaint) "cfl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cfm" = (/obj/structure/stool/bed/chair,/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5735,15 +5738,15 @@ "cgr" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgs" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgt" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cgu" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cgu" = (/obj/structure/table,/obj/item/weapon/stamp,/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cgv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgw" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cgx" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cgx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Observatory"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cgy" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgB" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cgC" = (/obj/machinery/light/small,/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cgC" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2) "cgD" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cgF" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5880,7 +5883,7 @@ "cjg" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cji" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cjj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/lattice,/turf/space,/area/space) +"cjj" = (/obj/machinery/monkey_recycler,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/turf/simulated/floor/plating,/area/space) "cjk" = (/obj/structure/rack,/obj/structure/disposalpipe/segment,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjl" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5919,7 +5922,7 @@ "cjT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "cjU" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cjV" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cjW" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cjW" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cjX" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint2) "cjY" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjZ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5951,6 +5954,7 @@ "ckz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "ckA" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "ckB" = (/obj/structure/lattice,/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Incinerator Output Pump"; on = 1},/turf/space,/area/space) +"ckC" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ckD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator) "ckE" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "ckF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6401,7 +6405,7 @@ "cti" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "ctj" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/labor) "ctk" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating,/area/shuttle/labor) -"ctl" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/toxins/test_area) +"ctl" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ctm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/aisat) "ctn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "cto" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) @@ -6485,6 +6489,7 @@ "cuO" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_4) "cuP" = (/obj/machinery/door/airlock/engineering{name = "Telecommunications"; req_access_txt = "61"},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "cuQ" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) +"cuR" = (/turf/indestructible,/area/toxins/test_area) "cuS" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; on = 1},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/doorButtons/access_button{idSelf = "incinerator_access_control"; idDoor = "incinerator_airlock_interior"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cuT" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "cuU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -6502,6 +6507,72 @@ "cvg" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Turbine Exterior Airlock"; req_access_txt = "32"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cvh" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cvi" = (/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) +"cvj" = (/turf/simulated/floor/plating,/area/space) +"cvk" = (/obj/machinery/vending/boozeomat,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft) +"cvl" = (/turf/simulated/floor/wood,/area/maintenance/aft) +"cvm" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/aft) +"cvn" = (/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvo" = (/obj/structure/table/wood,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/aft) +"cvp" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvq" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/wood,/area/maintenance/aft) +"cvr" = (/obj/structure/table/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) +"cvs" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvt" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvu" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvv" = (/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) +"cvw" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/aft) +"cvx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/wood,/area/maintenance/aft) +"cvy" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvA" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{tag = "icon-connector_map (WEST)"; icon_state = "connector_map"; dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvB" = (/obj/structure/grille,/obj/structure/window/fulltile,/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cvC" = (/obj/structure/door_assembly/door_assembly_mai,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/space) +"cvE" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) +"cvF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvI" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvJ" = (/obj/effect/spawner/lootdrop/maintenance,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/aft) +"cvM" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/toy/minimeteor,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvN" = (/obj/structure/disposalpipe/segment,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvO" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/c_tube,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvQ" = (/obj/structure/mopbucket,/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvS" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) +"cvT" = (/obj/structure/disposalpipe/segment,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvU" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvW" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cvX" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvZ" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/latexballon,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwa" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwb" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) +"cwc" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/cigbutt/roach,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwd" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/general/hidden{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwe" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwf" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwg" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) +"cwh" = (/obj/machinery/light/small,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwi" = (/obj/machinery/light/small,/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/clipboard,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwj" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) +"cwk" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) +"cwl" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) +"cwm" = (/obj/structure/table,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwn" = (/obj/structure/table_frame,/obj/item/weapon/wirerod,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/asmaint2) +"cwo" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cwp" = (/obj/structure/stool/bed/dogbed,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwq" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cws" = (/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) +"cwt" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwu" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) +"cwv" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) +"cww" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6573,41 +6644,41 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaiaaiaaBaaCaaDaaFaaEaasaasaauaaGaaiaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaiaaJaasaasaasaasaaKaasaasaaLaaMaaiaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaQaaKaasaasaaRaaSaaKaasaaTaaUaaiaaaaaVaafaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaZaasaasaasaaKabaabbaasaasabcabdaaiaaiaaiaafaaaaaaaaaaaaaaaaafaaaaaVaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabeabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaOaaWaaNaaXabiaasabjaasaasaasaasaasaasaauaasabkablaaiaafaafaafaafaafaafaafaafabmabmabmabnabmabmaboaboabpabpabpaboaboaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaYabraaPadhabuaasaasabvabwabxaasabyabzabAaasabBabCaaiaafaaaaafaafaafaafaaaaafabnabDabEaeIabFabGaboabIabHabKabJabLaboaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafabMaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaabfabfabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabNabPabOadhabSabTabSabSabSabUabSabSabSabVabSabSabWaaiactactactactactactactactabmabXabEaeIabYabDaboacaabZaccacbacwaboaaaaafacdaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaafaafaaaaceaaaacfaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabQacgabRadhackaasaclabSacmacnacoabSacpacqacrabSacsaaiacMacNacOacOacPacQacRacSactacuabEaeIaecabDabpacyacxaczaccacUaboaaaaafacAacBacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaafaaaaafaaaaaaaceaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacCaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaciacDabsacjacHaasacIabSacJacnacIabSacKacqacIabSacLaaiacMadkadladladladladmadnactacTabEaeIaecabDabpacWacVacXaccadpaboaafaafacAacYacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadaaaaacZacZacZacZacZaafabfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadbadbadbadbaafaafaaaadcaaaaafaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhaaHaaHaaHacFaddacGadhadfadgadhabSadfadiadhabSadfadjadhabSabSaaiafnaRFaNFadVaNFadWbhdbiGactadoabEaeIaecabDaboadradqadtadsaeeaboabnabmadvacBacAacAachaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadcaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHabhadeadDadGadFadIadHadKadJadMadLadOadNadUadLaepadPadQadRaaiadSadTaNFboSaNFadXadYadZaeaabEabEaebaeTabmaboaedaboahPaboaefaboaegaehacAaeiacAarqanTanTahtaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaaeoaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHadEaeqaeraeuaetaewaevafiaexavkaifaexaexaexaifaOyaOvaeyaezaaiaeAaeBaeCaeDaeEaeFaeGaeHactahoagSaeJahpabmaeLaeMaeNaeOaePaeQaeNaeRaeSaeVaeUaeVamoamIamJagPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOxaesaOzaRfbfTbfPabSbiEafjafkaflafmacEafoafpafpafpabSafqafraaiafsaftafuafvafwafxafyafzactacvabnafBafCabmafDafEafFafGafHafIafJafKafLacAafMacAaptanTanTagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaHaaHbaMbOybkdaaHabSadhafQadfafRafRafRafRafRafRafRafSafTafUafVafWafXafYafZagaagbagcafUagdahSageagfaggaghagiafFagjafHagkaglagmabmadvacAacAacAachaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaHaaHaaHaaHaaHaaiagnagoagpafRagqagragsagtaguafRagvagwagxagyagzagAagBagaagCagbagDagEagFafFagGagHagIagJagKaeKafAagNagOagLagMagRanUagUacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaiagVagWagXafRagYagZahaahbahcafRagvahdaheahfahgahhahiahjahjahkahlahmahnaqqaPUaPTahqahrahsahTahVahuahvahWahwabmacAahxacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiahyagWaHeafRagYagZahzahbahAafRahBahCahDahEahFahGahHahIahJahKahLahMahNahObzKbzJahRcdlankaiaahUbuJahXaLjahYahZaibaicaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfacfafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaiaieagWaigafRaihaiiaiiaijahcafRaikailafUaimainaioaipaipaiqairafUafUaisaitaduaduaduabmabmabmabmabmabmabmabmabmaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaixaiyaixaizaiAafRafRafRafRafRafRaiBaiCafRaiDaiEaiFaiFaiFaiFaiFaiFaiFaiFaiGaiHaiIaiJaiFailaiAaiKaiLaiMaiNaiOaiPaiQaiRaiuaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaiSabqaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaiTaiUaiVaiWaiXaiYaiZajaajbajcajdajeajfajgajhajiajjajkajjajjajjajjajjajjajlajjajiajmajkajnajoajpajqajrajsajtajuajvajwaiuaivaiwacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadzaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelaekaekaekaejaaaaafaizajyajzajAajBajCajDajEajFajGajHajIajJajMajLajIajJajKajLajIajJajQajOajOajOajPahCajNajRajSajTajUajVajWajVajVajVajXajYaiPaiuaivaiwaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafaafadzaafaafaafaafaafabfabfabfaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaiSafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNakJalqalpafNaiyaiyakdakeakfakgakhaiAafRakiafRafRakjakkaklakmaknakoaklakmaknakpakqakmakraksakmaktakuakmakvakwakxaiAakyakzaiPakAaiPakBakCaiPaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaakDaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaakEaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaakcalralRalQamnakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaaljaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafalnaloalnaafaafaafaafabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNakGakIakHafNaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaalnalPalnaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajxajxakFafNaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalnalnammalnalnaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakcakbajxakaafNaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaafamDamEamFamGamDamHamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZajxajxafOamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamwamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamDanganhaniamDanjamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNaeZaeZaeZafNaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaamHamHamHamHanManNanOamHaaaaaaamDanPanQanRamDanSamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYaeXaeXaeXaeWaaaaafaizaiyanVaixanWanXanXanYanZanYanXanXaoaaobaobaobaocaobaobaodaoeaofaoganaaohanaanaanaanaaoianaanaanaanaanaaojaokaolaomaonaonaooaopaoqaoraosacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafancaotaouaovancaowaowaowaowaowalmalmalmallaoxamlanLallallamlallallallallaoyallallaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaEoaGaaEpaaaaGbaHoaHnaafaaaaagaagaagaaaaaaaafamHaozaoAaoBanSaoCanSamHaoDaoDamDamDaoEaoFamDanSamHamHaoDaoDaoDamHamHaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaoGakLaixaoHanXaoIaoJaoJaoJaoKanXaoLaoMaoNaoOaoPaoQaobamtamwaoRaoSaoTagTagTagTagTagTaoUaoVagTagTagTagTagTaoWaoXaoYaoZapaapbapcacAapdapeacAaafapfapgapgaphapgapgapiaafaafaaaaaaaaaaafalmapjalmaaaaowancancapkaplancapmamlamlamlallapnamlapoallamlamlamlappallamlallapqaprallamlapsallaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaIMaINaIMaaaaJXaJYaJXaafaafaoDapuaoDaaaaaaaafamHapvapwapxapyapzapAamHapBanSapCapDapEanSanSanSanSanSanSanSanSanSamHaaaapFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaoGapGaixapHanXapIapKapJapLapManXapNaobapOapPapQapRapSamtamwamyaoSahxapTapTapTapTapTapUapVapTapTapTapTapTapTapTapTapWapXapYapZapZapZapZapZaqaaqbaqcaqcaqcaqcaqcaqbapWaafaaaaaaaaaaafaqdamlalmaaaaowaqeaqfaqgaqhamlamlamlallamlallaqiamlamlallamlaqjaqkaqlaoyamlallaqmaqnallamlaqoallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqpaIMaOuaIMaqpaJXaYFaJXaqpaafaqranSaoDaaaaaaamHamHamHamHamHaqsaqtaquaquaqvaqwaqxaqwaqyaqzaqAaqBamHanSamHamHamHanSamHaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqCaqCaqCaqCaqCaqCaqCaqCaqDanXaqEapKaqFaqGaqHanXapNaqIaqJaqKaqLaqMapSamtamwaqNaoSahxapTaqPaqOaqQaqRaqSaqTapTaqUaqVaqWapTaqXaqYaqZapWaraarbarcardarearfargarhaqbaqcaqcaqcaqcaqcaqbapWaafaafaafaafalmalmapjalmalmaowariamlarjamlanKamlallallarkallallarlallallaqlarmarnamlallamlaroaroaroaroaroaroaroaroaroabtabtabtabtaaIabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpbEPbaWaZZarpbJUbHJbEQarpamHaoDapuaoDaoDaoDamHaruarvarvarvarvarvarvarwarxamHamHamHamHamHaryamHamHanSarzamHarAanSamHamHamHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaqCarBarCaqCarDarEarFaqCaqDanXarGarIarHarHarJarKarLarMarNarNarOarNapSamtamwarPaoSahxapTarRarQarSarTarUarVapTarWarXarYapTarXarZasaapWasbascasdaseaseaseasfasgaqbaqcaqcaqcaqcaqcaqbapWapWapWaaaaaaalmamlamlamlapmaowashaqlarjamlasiasjaskaoyamlamlamlamlaslamlamlarmasmamlasnamlaroasoaspasqaroasrassastaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarparpasuarparparpasuarparpasvanSanSaswaswarzasxasyaszasAasAasAasAasAasAasBasCasDaaIasEamHasFasGasHanSasxamHasIanSanSanSaoDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqCaqCaqCasJasJaqCasJasJasJaqCasKanXasLasMasNasOasPasQasRasSaobasTasUasVaobasWamwamyaoSahxapTapTapTapTapTasXasYapTasZataatbapTapTatcatbapWatdateamPatgatgathatiatjatkaqcaqcaqcaqcaqcatlatmatnatoaaaaaaalmamlamlatpamlaowatqamlatratsatsatsatsattatsatuamlamlamlamlamlamlamlamlallasjaroatvatwatwaroatxatyatzaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpatAatBatCarpatDatBatCarpapAatEatFatGatGatGatHatIatJatKatLatMatNatOamHasyatJaaIatPasDaoDatQatRamHamHamHamHamHamHamHanSaoDaafaagaagaagaagaagaagaagaagaagatSatTatSasJasJaqCaqCatUaqCaqCasKanXanXanXatVanXanXanXatWatXaobaobaobaobaobatYamwatZaoSahxapTaqPaqOauaaqRaubaucaudaueaufaugauhauiaujaukaulaumateaunauoauoaupasfauqatoaqcaqcaqcaqcaqcatoaurausatoaafaafallamlamlallallaowaowaowaowaowaowaowaowaowallautauuallallallallallallallauvauwauxauyauzauAauBauCatvauDaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaqparpasuauEaqparpauFauEaqpamHauGamHamHamHamHamHasyatJanSauHauIanSanSamHasyatJauJaafauJamHapwatRamHauKauLamHasIapAaszauMasAauNauOauOauOauOauOauPauOauOauOauNauQauNauNauRauNauSauRauTauUauVauWauWauWauWauWauWauWauXauYauWauWauWauWauZavaavbavbavcavdapTarRarSarSavfarUavgavhatfavjaxZavlavmavnavoavpavqavraunauoauoaupasfaveatoaqcaqcaqcaqcaqcatoavtausatoaaaaaaallavuamlamlavvallavwanLavxavyanKallatqanKallavzamlallavAamlallavBavCavDavEatsatsavFavGavHavIavJavKavLaroabtabtaaIaaIabtabtabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavNavNavNavOavNavNavNavPavQavRavPavPavPavSamHavTatJaDravUavVanSavWamHasyavXasAasAasAasAasAasAasCanSavVavYanSanSavZawaawbawcawdawdawdaweawdawfawdawdawgawhawiawjawjawjawjawjawjawkawlawmawnawnawnawnawnawnawnawoawnawpawpawpawpawpawqawrawsawtawuapTapTapTapTapTawvawwawxawyawzawAawBaviawDawEawFawGawHawIawJawJavsawLawMawNaqcaqcaqcaqcaqcawOawPawQatoaaaaaaallamlamlamlamlamlamlavDatsatsatsatsatsatsatsawRamlamlamlamlasnamlamlarjawSawTawUawVawWawXatwatwatwawYaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMawZaxaawZaxbaxaaxaaxcawZaxaaxdaxeaxfaxfaxgamHavTatJaxhanSanSaxiaxjamHaxkarvarvarvarvarvarvaxlatJaxmanSamHasvasvaxnapNaqCaxoaxpaxqaxqaxraxqaxsaxqaxqaxtaxoaxuaxvaxvaxvaxvaxvaxvaxvavZaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLamwaxMacAaeUapTaqPaqOaxNaqRaxOaxPaxQaxQaxQaxRaxSaxTaxUaxVaulaxWaxXaxYaHFayaaybatiaycaydaqcaqcaqcaqcaqcaydapWapWapWallallallanKallallaoyallallarjallallayeallallaoyallarjavuallallaoyallamlavuarjawSayfaroaygavGayhayiayjavGaykaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaabfabfabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaZaasaasaasaaKabaabbaasaasabcabdaaiaaiaaiaafaaaaaaaaaaaaaaaaafaaaaaVaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeabeabeabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaOaaWaaNaaXabiaasabjaasaasaasaasaasaasaauaasabkablaaiaafaafaafaafaafaafaafaafabmabmabmabnabmabmaboaboabpabpabpaboaboaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacCaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaYabraaPadhabuaasaasabvabwabxaasabyabzabAaasabBabCaaiaafaaaaafaafaafaafaaaaafabnabDabEaeIabFabGaboabIabHabKabJabLaboaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafabMaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadbadbadbadbaafaafaaaadcaaaaafaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabNabPabOadhabSabTabSabSabSabUabSabSabSabVabSabSabWaaiactactactactactactactactabmabXabEaeIabYabDaboacaabZaccacbacwaboaaaaafacdaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfaafaafaaaaceaaaacfaafabfabfabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadcaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgabQacgabRadhackaasaclabSacmacnacoabSacpacqacrabSacsaaiacMacNacOacOacPacQacRacSactacuabEaeIaecabDabpacyacxaczaccacUaboaaaaafacAacBacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaafaaaaafaaaaaaaceaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaaeoaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaciacDabsacjacHaasacIabSacJacnacIabSacKacqacIabSacLaaiacMadkadladladladladmadnactacTabEaeIaecabDabpacWacVacXaccadpaboaafaafacAacYacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadaaaaacZacZacZacZacZaafabfaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhaaHaaHaaHacFaddacGadhadfadgadhabSadfadiadhabSadfadjadhabSabSaaiafnaRFaNFadVaNFadWbhdbiGactadoabEaeIaecabDaboadradqadtadsaeeaboabnabmadvacBacAacAachaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHabhadeadDadGadFadIadHadKadJadMadLadOadNadUadLaepadPadQadRaaiadSadTaNFboSaNFadXadYadZaeaabEabEaebaeTabmaboaedaboahPaboaefaboaegaehacAaeiacAarqanTanTahtaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHadEaeqaeraeuaetaewaevafiaexavkaifaexaexaexaifaOyaOvaeyaezaaiaeAaeBaeCaeDaeEaeFaeGaeHactahoagSaeJahpabmaeLaeMaeNaeOaePaeQaeNaeRaeSaeVaeUaeVamoamIamJagPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOxaesaOzaRfbfTbfPabSbiEafjafkaflafmacEafoafpafpafpabSafqafraaiafsaftafuafvafwafxafyafzactacvabnafBafCabmafDafEafFafGafHafIafJafKafLacAafMacAaptanTanTagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHaaHaaHbaMbOybkdaaHabSadhafQadfafRafRafRafRafRafRafRafSafTafUafVafWafXafYafZagaagbagcafUagdahSageagfaggaghagiafFagjafHagkaglagmabmadvacAacAacAachaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfacfafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaHaaHaaHaaHaaHaaiagnagoagpafRagqagragsagtaguafRagvagwagxagyagzagAagBagaagCagbagDagEagFafFagGagHagIagJagKaeKafAagNagOagLagMagRanUagUacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaafdaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaiagVagWagXafRagYagZahaahbahcafRagvahdaheahfahgahhahiahjahjahkahlahmahnaqqaPUaPTahqahrahsahTahVahuahvahWahwabmacAahxacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaaaaafaaaaaaaaaadzaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaenaenaenaenaenaaaafdaaaaenaenaenaenaenaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiahyagWaHeafRagYagZahzahbahAafRahBahCahDahEahFahGahHahIahJahKahLahMahNahObzKbzJahRcdlankaiaahUbuJahXaLjahYahZaibaicaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafacZacZacZacZacZaaaadzaaaacZacZacZacZacZaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaafaafbafbafbafbafcafdafeaffaffaffaffafgaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaiaieagWaigafRaihaiiaiiaijahcafRaikailafUaimainaioaipaipaiqairafUafUaisaitaduaduaduabmabmabmabmabmabmabmabmabmaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaadwadxadxadxadxadyadzadAadBadBadBadBadCaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaiSafPafPafPafPafPaaaafdaaaafPafPafPafPafPaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaixaiyaixaizaiAafRafRafRafRafRafRaiBaiCafRaiDaiEaiFaiFaiFaiFaiFaiFaiFaiFaiGaiHaiIaiJaiFailaiAaiKaiLaiMaiNaiOaiPaiQaiRaiuaivaiwaidaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafaemaemaemaemaemaaaadzaaaaemaemaemaemaemaiSabqaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaakEaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaixaiTaiUaiVaiWaiXaiYaiZajaajbajcajdajeajfajgajhajiajjajkajjajjajjajjajjajjajlajjajiajmajkajnajoajpajqajrajsajtajuajvajwaiuaivaiwacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaaadzaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafalnaloalnaafaafaafaafabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelaekaekaekaejaaaaafaizajyajzajAajBajCajDajEajFajGajHajIajJajMajLajIajJajKajLajIajJajQajOajOajOajPahCajNajRajSajTajUajVajWajVajVajVajXajYaiPaiuaivaiwaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafaafadzaafaafaafaafaafabfabfabfaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaalnalPalnaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNakJalqalpafNaiyaiyakdakeakfakgakhaiAafRakiafRafRakjakkaklakmaknakoaklakmaknakpakqakmakraksakmaktakuakmakvakwakxaiAakyakzaiPakAaiPakBakCaiPaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaakDaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalnalnammalnalnaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaoDaoDaoDaoDaoDaaaakcalralRalQamnakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaaljaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafamDamEamFamGamDamHamHamHamHamHamHamHamHamHaaaaaaaaaaaaaoDaqzanSaqAaoDaaaafNakGakIakHafNaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanganhaniamDatRatRamHasFanSatQamHauPamHaaaaaaaaaaafamHbuEanSbLIamHaaaafNajxajxakFafNaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanPanQanRamDbNobRdaqsanSanSbXQamHamHamHaoDamHaoDaoDamHcbyccAcbyamHaaaakcakbajxakaafNaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaamDamDaoEaoFamDaryanSamHanSanSanScdwanSanSanSanSanSanSanSanSanSceeaoDaaaafNajZajxajxafOamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamwamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamHapDapEcfeapxbRdamHamHaoDaoDamHamHamHamHaoDamHaoDaoDamHatKanScfjamHaaaafNaeZaeZaeZafNaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaamHamHamHamHanManNanOamHaaaaaaamHanSapEaryanSanjamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaamHcguanSapBamHaaaaeYaeXaeXaeXaeWaaaaafaizaiyanVaixanWanXanXanYanZanYanXanXaoaaobaobaobaocaobaobaodaoeaofaoganaaohanaanaanaanaaoianaanaanaanaanaaojaokaolaomaonaonaooaopaoqaoraosacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafancaotaouaovancaowaowaowaowaowalmalmalmallaoxamlanLallallamlallallallallaoyallallaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaEoaGaaEpaaaaGbaHoaHnaafaaaaagaagaagaaaaaaaafamHaozaoAaoBanSaoCanSamHaoDaoDamHasHapEaryasHamHamHamHaoDaoDaoDamHamHaaaapFaaaaaaaaaaoDaoDcgxaoDaoDaaaaaaaaaaaaaaaaaaaaaaafaixaoGakLaixaoHanXaoIaoJaoJaoJaoKanXaoLaoMaoNaoOaoPaoQaobamtamwaoRaoSaoTagTagTagTagTagTaoUaoVagTagTagTagTagTaoWaoXaoYaoZapaapbapcacAapdapeacAaafapfapgapgaphapgapgapiaafaafaaaaaaaaaaafalmapjalmaaaaowancancapkaplancapmamlamlamlallapnamlapoallamlamlamlappallamlallapqaprallamlapsallaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaIMaINaIMaaaaJXaJYaJXaafaafaoDapuaoDaaaaaaaafamHapvapwapxapyapzapAamHapBanSapCanSapEaryanSanSanSanSanSanSanSanSamHabtabtaaaaaaaaaaaaaoDanSaoDaaaaaaaaaaaaaaaaaaaaaaaaaafaixaoGapGaixapHanXapIapKapJapLapManXapNaobapOapPapQapRapSamtamwamyaoSahxapTapTapTapTapTapUapVapTapTapTapTapTapTapTapTapWapXapYapZapZapZapZapZaqaaqbaqcaqcaqcaqcaqcaqbapWaafaaaaaaaaaaafaqdamlalmaaaaowaqeaqfaqgaqhamlamlamlallamlallaqiamlamlallamlaqjaqkaqlaoyamlallaqmaqnallamlaqoallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqpaIMaOuaIMaqpaJXaYFaJXaqpaafaqranSaoDaaaaaaamHamHamHamHamHaqsaqtaquaquaqvaqwaqxaqwaqycgCarAaqBamHanSamHamHamHanSamHcjjabtaaaaaaaaaaaaaoDanSaoDaaaaaaaaaaaaaaaaqCaqCaqCaqCaqCaqCaqCaqCaqDanXaqEapKaqFaqGaqHanXapNaqIaqJaqKaqLaqMapSamtamwaqNaoSahxapTaqPaqOaqQaqRaqSaqTapTaqUaqVaqWapTaqXaqYaqZapWaraarbarcardarearfargarhaqbaqcaqcaqcaqcaqcaqbapWaafaafaafaafalmalmapjalmalmaowariamlarjamlanKamlallallarkallallarlallallaqlarmarnamlallamlaroaroaroaroaroaroaroaroaroabtabtabtabtaaIabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpbEPbaWaZZarpbJUbHJbEQarpamHaoDapuaoDaoDaoDamHaruarvarvarvarvarvarvarwarxamHamHamHamHamHanSamHamHanSarzamHarAanSamHamHamHaaaaaaaaaaaaaoDanSaoDaaaaaaaaaaafaafaqCarBarCaqCarDarEarFaqCaqDanXarGarIarHarHarJarKarLarMarNarNarOarNapSamtamwarPaoSahxapTarRarQarSarTarUarVapTarWarXarYapTarXarZasaapWasbascasdaseaseaseasfasgaqbaqcaqcaqcaqcaqcaqbapWapWapWaaaaaaalmamlamlamlapmaowashaqlarjamlasiasjaskaoyamlamlamlamlaslamlamlarmasmamlasnamlaroasoaspasqaroasrassastaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarparpasuarparparpasuarparpasvanSanSaswaswarzasxasyaszasAasAasAasAasAasAasBasCasDaaIasEamHanSasGasHarAasxamHasIanSanSanSaoDaaaaaaaaaaafaoDanSaoDaaaaaaaaaaqCaqCaqCasJasJaqCasJasJasJaqCasKanXasLasMasNasOasPasQasRasSaobasTasUasVaobasWamwamyaoSahxapTapTapTapTapTasXasYapTasZataatbapTapTatcatbapWatdateamPatgatgathatiatjatkaqcaqcaqcaqcaqcatlatmatnatoaaaaaaalmamlamlatpamlaowatqamlatratsatsatsatsattatsatuamlamlamlamlamlamlamlamlallasjaroatvatwatwaroatxatyatzaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpatAatBatCarpatDatBatCarpapAatEatFatGatGatGatHatIatJatKatLatMatNatOamHasyatJaaIatPasDaoDanSarzamHamHamHamHamHamHamHanSaoDaafaafaaaaafaoDanSaoDaagaagaagatSatTatSasJasJaqCaqCatUaqCaqCasKanXanXanXatVanXanXanXatWatXaobaobaobaobaobatYamwatZaoSahxapTaqPaqOauaaqRaubaucaudaueaufaugauhauiaujaukaulaumateaunauoauoaupasfauqatoaqcaqcaqcaqcaqcatoaurausatoaafaafallamlamlallallaowaowaowaowaowaowaowaowaowallautauuallallallallallallallauvauwauxauyauzauAauBauCatvauDaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaqparpasuauEaqparpauFauEaqpamHauGamHamHamHamHamHasyatJanSauHauIanSanSamHasyatJauJaafauJamHanScjWamHauKauLamHasIapAaszauMasAauNauOauOauOckCauMctlauOauOauOauNauQauNauNauRauNauSauRauTauUauVauWauWauWauWauWauWauWauXauYauWauWauWauWauZavaavbavbavcavdapTarRarSarSavfarUavgavhatfavjaxZavlavmavnavoavpavqavraunauoauoaupasfaveatoaqcaqcaqcaqcaqcatoavtausapWallallallavuamlamlavvallavwanLavxavyanKallatqanKallavzamlallavAamlallavBavCavDavEatsatsavFavGavHavIavJavKavLaroabtabtaaIaaIabtabtabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavNavNavNavOavNavNavNavPavQavRavPavPavPavSamHavTatJaDravUavVanSavWamHasyavXasAasAasAasAasAasAasCanSavVavYanSanSavZawaawbawcawdawdawdaweawdawfawdawdawgawhawiawjawjawjawjawjawjawkawlawmawnawnawnawnawnawnawnawoawnawpawpawpawpawpawqawrawsawtawuapTapTapTapTapTawvawwawxawyawzawAawBaviawDawEawFawGawHawIawJawJavsawLawMawNaqcaqcaqcaqcaqcawOawPawQapWamlamlamlamlamlamlamlamlamlavDatsatsatsatsatsatsatsawRamlamlamlamlasnamlamlarjawSawTawUawVawWawXatwatwatwawYaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMawZaxaawZaxbaxaaxaaxcawZaxaaxdaxeaxfaxfaxgamHavTatJaxhanSanSaxiaxjamHaxkarvarvarvarvarvarvaxlatJaxmanSamHasvasvaxnapNaqCaxoaxpaxqaxqaxraxqaxsaxqaxqaxtaxoaxuaxvaxvaxvaxvaxvaxvaxvavZaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLamwaxMacAaeUapTaqPaqOaxNaqRaxOaxPaxQaxQaxQaxRaxSaxTaxUaxVaulaxWaxXaxYaHFayaaybatiaycaydaqcaqcaqcaqcaqcaydapWapWapWamlallallanKallallaoyallallarjallallayeallallaoyallarjavuallallaoyallamlavuarjawSayfaroaygavGayhayiayjavGaykaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpavMaylavMaBGaxaaxaaMBavMaylavMayqayraxbaysamHavTavXaytasAasAasCayuayuallasnallayuayuayuayuayvaywauQauNauNauNauNayxapNarBaxoaaaaafaaaayyaaaayzaaaaafaaaaxoaxuaxvayAayBayCayDayEaxvavZayFayGayHayIayJayKayLayMayMayNayOayOayOayPaxKayQamwayRacAaeUapTarRarSarSaySarUayTayUayVayWayXayYayZayZazaayZapWazbazcazdazeazfazgapWaydaqcaqcaqcaqcaqcaydallaqoamlawTazhallallallaqoamlallaqoarjallaziamlallazjamlallazkazlallazmamlallaoyaoyarjaznazoaroazpavGazqazrazqavGazsaroaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaztaqpazuatBavMaymaynawCaypavMatBazuavMaqpazvazwamHazxazyazzazAatGazBayuazCazDazEazFazGazHazCayuazIazJazKawdawdawdawdawdazLazMaxoaafazNazNazOazNazPazNazNaafaxoaxuaxvazQazRazSazTazQaxvazUazVazWazXazYazZaAaaAbaAcaAdaAeaAfayOayOayOaAgayQamwaAhacAaeUapTapTapTapTapTaAiaAjaAkayZayZayZayZayZaAlaAmaAnayZapWapWapWapWaAoaApapWaydaqcaqcaqcaqcaqcaydallallamlaAqazhallaArallamlamlallamlarjallamlamlallamlamlallarjasjallamlamlallaAsamlarjawSaAtaroaroaroaroaroaroaroaroaroabtabtabtabtabtaafaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaylavMavMavMavMavMavMaylavMaaaaqpaAuaysaAvaAvaAwaAxaAvaAvaAyayuazCazEaAzaAAazEazEazCayuaqCaABaACaADaADaADaADaADaADaADaAEaaaazNaAFaAGaAIaAHaAJazNaaaaxoaxuaxvazQaAKaALaAMazQaxvawaazLaxxaANaAOaAPaAQaARaAbaASaATayOayOaAUayOaAgayQamwayRacAaeUapTaqPaqOaAVaqRaxOaAWayZaAXaAmaAYaAYayZaAlaAZaAnayZaBaaBbaBcaBdaBeaApaafaBfaBgaBgaBgaBgaBgaBhaaaallamlaBiaBjallallallallallallaBkaBlallallallallallallaBmaBnaBoaBpaBpaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBpaBAaBBaBCaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6646,8 +6717,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtobqxbqybqxbmlbtpbjxbjxbtqbjxbtpcuWbjxbjxbqAbtraYpbtsbttbnGbtubtvbecbpbbjEbtwbtxbmzbsnbqHaWUbpibtyblibtzbtAbtBbtCbmGbliaaaaaaaafbtDbtEbnUbtFbtGaafaaaaaabqVbtHbtIbtJbtKbtLbtMbtNbpubtOaHYaHYbmSbmSbtPbtQbpGbtRbtSbtTbtUbtVbtWbtXbtWbtXbtWbtXbtWbtXbtYbtZbsPbuabubbucbudbuebufbugbuhbuibujbncbukbulbumbnmbunbhJbhJbuobhJbhJbupbuqburbusbutbtcbuubuvbuwbuxbuxbuxbuybuybuybuybuybwcbwbbwebwdbwebwfbwebrVbsbbgxbwgbqvbwhbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuFbuGbuFbuHbuIbuHbuHbuHbuHbuHcuXbuKbjxbqAbuLaYpbuMbaHbuNbuObuPbuQbuRbuRbuRbuQbuQbuSbqHaJkbuTbpjblibuUbuVbuWbuXbuYbliaaaaaaaafbuZbvabqRbvbbvcaafaaaaaabqVbvdbvebvfbvgbtLbtMbtNbpubvhaHYaHYbvibvjbvkbvlbvmbvnbtXbvobvpbvqbvrbvsbDibvubvvbvubFzbtXbhkbjZbsPbvxbvybvzbvAbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbvNbvMbvMbvObvMbvMbvPbvQbvRbvRbvSbvTbqibuxbvUbvVbvWbvXbvYbambuybxjbxibzCbyAbzDbxibAVbrVbsbbgxcjgbsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnwbkNbkNbkNaYpbkNbkNbkNbwibwicuYbwibwjbwkbwkbwibwibwlbwlbwmbwnbuQbwobwpbwqbwrbuQbsnbqHaHZaIcaIcbliblibwsbliblibwtbliaHUaHUaHUbwubwvbsubwwbwxaHUaHUaHUbpubpubpubpubpubpubpubpubpubvhaHYbwybtXbtXbtXbwzbtXbtXbtXbwAbvpbwBbwCbwDbwEbwFbwGbwHbwIbwDbhkbjZbsPbwJbwKbwLbwMbwNbwObrAbrAbrAbwPbwQbwRbwSbwTbwTbwTbwTbwUbwTbwTbwTbwVbwVbwWbwXbwYbwYbwZbxabqibuxbxbbxcbxdbxeahQbxgbxhbrVbrVbFBbFBbFBbrVcfYbrVbsbbgxbwgbqvcvhbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwicuZbxlbxmbxnbxobxpbwkbxqbxrbxsbxtbxubxvbxwbxxbxybuQbsnbqHaHYaHYaHYbxzaKQbxAaKAbxBbxCbxDaVLaVLaVLbxEbxFbxGbxHbxIaHYaHYaHYaHYaKQaHYaKAaHYaHYaHYbxzaHYbvhaHYbxJbtXbxKbxLbxMbxNbxObtXbxPbxQbxRbxSbwDbwEbwEbxTbxUbxVbwDbhkbxWbsPbrAbxXbxYbxZbwQbyabybbycbydbncbncbeHbyebwTbyfbygbyhbyibyjbykbwTbylbymbynbyobypbwYbyqbyrbysbytbyubyvbywbyxbyybyzbxhchfchfchfchfchfchfchfbrVbsbbgxbsdbsebseabtaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwkbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObxxbyPbuQbsnbyQaHYaHYaHYaHYaHYaHYaKAaHYbqHaHYaHYaHYaHYaHYbyRbySbyTaHYaHYaHYaHYaHYaHYaHYaKAbyUaHYaHYaHYaHYbvhbyVbyWbtSbyXbyYbyZbyYbzabtXbzbbvpbvqbzcbtXbzdbzebzfbzgbzhbtXbhkbjZbsPbsPbsPbsPbsPbncbncbncbncbncbncbzibgibzjbwTbzkbzlbzmbznbzobzpbwTbzqbzrbzsbztbzubwYbyqbzvbzwbzxbzybzzbzzbzzbzAbzBbxhchfchfctEctDchfchfchfbrVbsbbgxbsdbsebsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabwicuZbxlbxmbxnbxobxpbwkbxqbxrbxsbxtbxubxvbxwbxxbxybuQbsnbqHaHYaHYaHYbxzaKQbxAaKAbxBbxCbxDaVLaVLaVLbxEbxFbxGbxHbxIaHYaHYaHYaHYaKQaHYaKAaHYaHYaHYbxzaHYbvhaHYbxJbtXbxKbxLbxMbxNbxObtXbxPbxQbxRbxSbwDbwEbwEbxTbxUbxVbwDbhkbxWbsPbrAbxXbxYbxZbwQbyabybbycbydbncbncbeHbyebwTbyfbygbyhbyibyjbykbwTbylbymbynbyobypbwYbyqbyrbysbytbyubyvbywbyxbyybyzbxhchfchfchfchfchfchfchfbrVbsbbgxbsdbsebseabtaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabwkbyBbyCbyDbyEbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObxxbyPbuQbsnbyQaHYaHYaHYaHYaHYaHYaKAaHYbqHaHYaHYaHYaHYaHYbyRbySbyTaHYaHYaHYaHYaHYaHYaHYaKAbyUaHYaHYaHYaHYbvhbyVbyWbtSbyXbyYbyZbyYbzabtXbzbbvpbvqbzcbtXbzdbzebzfbzgbzhbtXbhkbjZbsPbsPbsPbsPbsPbncbncbncbncbncbncbzibgibzjbwTbzkbzlbzmbznbzobzpbwTbzqbzrbzsbztbzubwYbyqbzvbzwbzxbzybzzbzzbzzbzAbzBbxhchfchfctEctDchfchfchfbrVbsbbgxbsdbsebsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibzEbzFbzGbzHbzIcvbcvacvccvcbAZbzLbuRbzMbzNbzObzPbuQbzQbzRbzSbzSbzSbzTbzSbzSbzUbzSbzVaHYbzWbzXbzYbzYcuBbAabAbbAcbAdbAeaVLaVLbAfaVLbAgbAhaVLbAibAjbAkbAlaHYaHYbtXbAmbAnbAobtWbApbtXbtWbAqbArbtXbtXbtXbtXbtXbtXbtXbtXbhkbjZbfXbAsbAtbAubAvbAwbAxbAybAzbAAbAwbzibgibABbwTbACbADbAEbAFbAGbAHbwTbAIbAJbAKbALbAMbwYbyqbANbAObuybAPbxfbARbASbATbAUbxhchfchfchfbscchfchfchfbrVbsbbqtbAWbqvbqwbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibwibwkbwkbwkbwkbwibwibAXbAYbAZbBabuQbuQbuQbuQbuQbuQbBbbBcaIcaIcaIcaIcbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbBebBfbBgbBhbBhbBhbBhbBhbBibBhbBhbBjbBhbyebBkbyeaIdaJlbBlbtXbBmbBnbBobBpbBqbtXbBrbxQbBsbBtbBubBvbBwbBxbBybBzbBAbBBbBCbBDbBDbBEbBFbBGbBHbBIbBJbBKbBLbAwbzibgibBMbBMbBMbBMbBMbBMbBMbBMbBMbBNbBNbBNbBNbBNbBNbBObBPbBQbuybuybuybuybuybuybuybxhbrVbrVbrVbrVbrVbrVbrVbrVbsbbgxbBRbBSbjobjoaafaafaafaagaagaagaagaagaagaagaagaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTaaaaaaaaaaafaaaaaabwlbBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfaaaaaaaafaaabBdbCgbChbCibCjbCkbClbCmbCnbCobCpbCqbCrbBhbCsbCtcuDbCubCwbCvbCvbCxbCybCzbCAbyebyebyebyebtXbCBbCCbCDbCCbCEbtXbCFbvpbCGbCHbCIbCJbCIbCIbCKbCLbCMbCNbCObCObCObCPbCQbvlbCRbCSbCTbCUbCVbAwbzibgibBMbCWbCWbCWbCXbCWbCWbCWbBMbCYbCYbCZbCYbCYbBNbDabDbbqibDcbDdbDebDfbDgbDhbJqbDjbDkbDlbDmbDnbDobsmbtnbtnbvwbDsbDdbDdbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6655,50 +6726,50 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNcuCctMcuCafNbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhaGfbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbFAbtXbFCbCCbCCbCCbCCbGNbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbDpbGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekajxctyajxaekbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbDqbEHbDrbFDbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbAQbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybGabHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajxajxajxctLbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbMNbMNbMNbMNbMNbMNbOnbOCbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdclFbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbGLbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrcuQbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxctlbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZctzctAafNbERbERbERbwlbwlbERbERbERbwlbwlbwlaaaaaaaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebsbbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYctjctkctjaeWaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBaVQbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbpobLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWcuEbLYcuFbMabMbbMcbDnbMdbsbbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebsbbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbJYbJYbJYbBcbBcaaaaaaaaaaaabJYbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebsbbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbOsbGnbOtbGnbOubBcaaaaaaaaaaaabJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbpCbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbsbbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbPxbGnbGnbGnbPybBcaaaaaaaaaaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbGTbGUbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaabBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbxkbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbUobCWbRhbRibKKbRjbKKbRkbRlbCWbUobCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbOpbSsbGVbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafbRzaafaafaafbBcbBcbBcbBcbBcbBcbBcbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbGVbjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabStbSubSubSubSubSvbSwbSwbSxbSybSzbSAbSBbSCbSDbSEbBcbGnbGnbGnbGnbGnbGnbGnbSFbSGbSHbSIbSJbSKbSKbSKbSKbSLbSMbSMbSMbSNcqubSObDybDybSPbBccqnbMqbOAbSQbSRbSSbSTbRQbRQbSUbSVbRQbRQbSWbSXbSYbMFbSZbTabTbbTcbMFbTdbTebTfbOUaafbOVbTgbThbTibMKbMLbNPbTjbTkbTkbTkbTlbLFbTmbQZbTnbTobTpbTqbTrbTsbTsbTtbLFbKvbBMbItbItbItbItbTubTvbRjbTwbTubItbItbItbItbItbTxbTybTzbTAbTBbTCbTCbTCbTCbTDbOmbSqbSqbTEbPvbTFbSsbGVbjobjobjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabJYbJYbJYbGnbTHbTIbTJbTKbTLbBcbTMbJYbJYbJYbJYbJYbJYbJYbJYbDCbTNbTObTObTObTObTObTObTObTObTPbTPcqxbTPbTPbTQbTRbBccqnbMqbOAbSQbTSbTTbTUbTVbPSbTWbTXbPSbPSbTYbTZbUabUbbUcbUdbUebUfbMFbTdbUgbUhbQabQbbNLbUibRYbRYbMKbMLbNPbUjbyebyebyebNYbLFbUkbMUbMUbUlbUmbUnbVibUpbVibUnbLFbKvbBMbQjbQkbQkbUqbQmbKKbQnbQobUrbUsbCWbCWbCWbItbUtbUubUvbUwbRnbRpbUxbUybUzbUAbOpbSqbSqbSqbPvbTFbSsbGVbsebsebjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUDbGnbUDbGnbUEbTIbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjbyebUZbzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWcqUbCWbVjbRibKKbRjbKKbRkbVkbCWcqUbCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbHzbjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbJYbJYbJYbVzbVAbVBbVCbVDbGnbVEbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbVFbVGbVHbVIbVJbUGbVKbVLcqEbVNbVObTPbTRbBccqnbMqbOAbVPbVQbKmbVRbVSbKmbVTbVUbVVbKmbVWbQRbVXbLnbVYbUfbMFbUdbVZbWabRVbWbbNKbLDbNLbWcbWdbWebMKbMLbyebUjbyebABbzibNYbLFbWfbWgbWhbWibUmbWgbWjbUpbWjbNVbNXbKvbBMbCWbCWbCWbWkbWlbQobSgbKKbShbWmbQkbQkbSjbBMbPvbWnbWobWobPvbPvbWpbWqbWrbWsbWtbWubTCbWvbSqbSqbSsbGVbjobWwbjobWxbjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbJYbWybWzbWzbWAbTLbWBbBcbJYbJYaaaaaaaaaaaaaaaaaaaaabDCbTNbTObWCbWDbWEbVHbWFbWCbWCbVKbWGcqGcqFbWIbTPbTRbBccqnbMqbWJbWKbWKbWLbWMbWNbWObWPbWQbWRbKmbMFbQRbWSbWTbVYbWUbMFbUdbVZbTdbTebWVbOUaafbOVbWWbWXbWYbMKbMLbyebUjbyebGHbGHbNYbLFbLGbWZbXabLGbXbbLGbLGbLGbLGbLGbLFbKvbBMbItbItbItbItbTubXcbRjbXdbTubItbItbItbItbBMbRrbXebRrbRrbRrbPvbWpbWqbXfbXgbXhbXibUwbXjbPvbSqbSsbGVbjobsebsebsebXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafbBcbBcbBcbBcbBcbBcbVEbBcbBcbBcbBcaafaaaaaabXlaaaaaaaaaaaaaaabEZbTNbTObWCbWCbXmbXnbXobWCbXpbXqbXrcqIcqHbXsbTPbTRbBccqJbXwbCrbWKbXxbXybXybXzbXAbXBbXCbXDbKmbXEbXFbVXbLnbVYbXGbMFbXHbVZbTdbXIbXJbQabQbbNLbXKbWdbWdbMKbMLbNPbUjbyebXLbzibNYbXMbSabSabXNbLGbIHbIkbQBbyebXRbXSbKwbKvbBMbQjbQkbQkbXTbQmbKKbQnbQobXUbXVbCWbCWbCWbBMbXWbRrbRrbRrbRrbPvbXXbXXbXYbXZbOpbOpbUwbOpbPvbOpbSsbGVbjobYabYbbYcbXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabqabfabfabfabfabfaaaaaabBcbGnbGnbGnbGnbGnbGnbGnbGnbWBbJYaafaaaaaaaafaaIbYdaaaaaaaaabEZbTNbTObYebYfbYgbYhbYibYjbYkbYlbYmcqMcqKbYobTPbYpbYqbYrbYsbGybWKbYtbXybYubYvbYwbYxbYybYzbYAbNFbYBbLnbLnbLnbYCbMFbYDbYEbTdbTebMFbOUaafbMKbMKbMKbMKbMKbMLbNPbUjbyebYFbzibYGbYHbTkbYIbYJbyebRybQCbTGbyebYNbKFbYObYPbBMbCWbUobCWbYQbRibKKbRjbKKbRkbYRbCWbUobCWbBMbYSbRrbYTbRrbRrbYUbYVbYWbYXbYYbOpbUwbUwbYZbPvbBRbZabUBbjobZcbZdbsebXkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaacfaaaaafaaaaafaaaabfaafaafbBcbZebGnbBcbBcbBcbRAbBcbBcbBcbBcaaaaaaaaaaaIbZfbZgaaIaaIaafbEZbTNbTObZhbWCbUGbUGbUGbWCbZibZjbZkcqGcqNcqPbTPbBcbBcbZnbZobZpbWKbWKbZqbXybZrbZsbZtbZsbZubKmbMFbZvbZwbZxbZybONbZzbZAbZBbWabRVbZCbNKbLDbNLbZDbZEbZEbMKbMLbNPbUjbyebyebyebZFbZGbyebZHbZIbyebyebZJbyebyebZIbZKbZLbZMbBMbCWbCWbCWbZNbZObQobZPbKKbShbZQbQkbQkbSjbBMbRrbRrbZRbRrbRrbPvbXXbXXbZSbZTbOpbZUbZVbZWbPvboUbZabGVbjobjobjobsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXbZYbZZaaabZXbZYbZZaaabZXbZYbZZaaaabfaaaaaabBccaacabbBccacbGnbGncadbOucaebBcaaaaaaaaacafaaIaaIaafaaaaaabEZbTNbTObWCcagcahbUGcaibWCbWCbVKcajcqGcqKcakbTPcalcamcancaocapcaqcarcascatcascatcaucatcavbKmcawcaxcaybPSbPSbPUbRPcazbRUbPVbTecaAbOUaafbOVcaBcaCcaDbMKbMLbyebUjbzicaEcaFbZFcaGbyebZHcaHcaIcaJcaKcaLcaIcaMbZHbgxcaNbBMbBMbBMbBMbBMbBMcaOcaPcaObBMbBMbBMbBMbBMbBMbPvbPvbPvbPvbPvbPvcaQcaQcaRcaSbPvbPvbPvbPvbPvbjobRxbGVbjocaTcaUbsebjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaabBcbJYbJYbBcbBccaWcaXbOubGnbQDbBcaaaaaaaaaaaaaafaaaaaaaaaaaabDCbTNbTObUGcaYcaZbUGcbacbbbUGbVKcbccqEcqQcqVcuPcqXcqWbOAaZDcbgcbhcbicbjcbkcblcbmcbnbXycbobKmcbpbMFbZvbRPbRQcbqcbrcbscbtbLAcbucbvbQabQbbNLcbwbZEbZEbMKbMLbyecbxcbycbzcbAcbBcbCbyecbDcbEcbFcbGcbHcbGcbIcbEcbJbgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjocbMbMfbkGcbNcbNbPvcbOcbOcaRbQtcbPcbQbsebsebsebBRbRxbHzbjocbRbsebsebjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXcaVbZZaafbZXcaVbZZaafbZXcaVbZZaaaaafaafaafaafaafaafaafbBcbBcbBcbBcbRAbBcbBcaaaaaaaaaaaaaafaaaaaaaafaaabDCbTNbTObUGcbScbTcbUcbVcbWbUGcbXcbYcbZccaccbbTPccccqYcceccfccgcchcciccjcckcclccmccnccoccpccqccrbMFbZvcctbMFbMFbMFcctcctcctbTeaVSaVRaafbMKbMKbMKbMKbMKbMLbyebYFccuccvccwccxccybyebyecczccAccBbKwccCccDbyebyebgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjobseccEbqvccFccGbPvccHccHccIbQtbPvbOpbjoccJccKbBRbRxbGVbsebsebsebUCbkHbVybkHaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaaaaaaaaaaaabBcccRbBcbGnbGnbBcaafaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmbMFbOQccscctbMFbMFbMFbMHbSYcctbTecctbKmaafaafaafaafaafaafbMLcdjcdjcdjcdkcvdcdjcdjcdjcdmbyecdncdncdocdncdnbyebABbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbUBbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccdwbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhcctbKmbKmbKmaaaaaaaafaaacdVcdWcdXcdYcdZceacebceccdjcedceecefcegcehccBccBbzibzibZGbntceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqbXOcesbjobjocetceoceuceocevbGVbjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacexaaaaaaaaacexaaaaaaaaacexaaaaaaaafcducducduceycezceAceBceCbGnceDceEceFceEceEceEceEceEceEceEceEceEceEceGceHbRGceIceJceKceKceKceKceKceKceKceKceKceKceKceKceKceKccTccUceLceMceNceOcePceQceRceSceTceKcdbcdLcdMcdNcdOcdPcdQcdRbMFcdScdTcdUbLCcdibLCaaaaaaaafaaacdjceXceYceZcfacfbcfccfdcdjcedcfeccBcffcfgcfhcfibDZcfjcfkcflcflcflcflcflcflcflcfmcfncflcflcflcflcflcflcfocfpcfqbmicfrcfscftcftcftbXPbYKbXQbYMbYLcbfbZbbZbccLccMbjocaUbsecfCbjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafalkcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKbKmcsKbLuceVbLuceUbLuceVbLuceWbLucsNbKmbKmbKmaafaafaafaaacdjcgqcgrcgscgtcgucgvcgwcdjbzicgxcgycgzcgAcgBbDZcgCcgDbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbXkbXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacgLaaaaaaaaacgLaaaaaaaaacgLaaaaaaaafcducducducgMcgNcgOcdvbGnbGnbGnbGnbBcaaaaaaaafaaaaaaaafaaaaaaaafaaabBccgPbBccgQcgRceKcgScgTcgUcgVcgWcgXceRceRceRcgYcgZchachbcgXccUchcchdchecgictIccUchgchhchiceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaafaafaaaaaaaaaaafaafcdjchmchnchochpchqchrchschtchuchubFMchvchwbFMchxbyebyebyeaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjochybLebjochzbZabjoaaaaaaaaaaaabjobsebZachAchBchBchCchDchBaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcaafaafchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaafcihciichncijcikcilcimcincdjaafbyecczciobNPbNPbyebyeaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcaaaaaachGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcvecjhcjicdjaafaafaafcjjaaaaaaaafaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkbXkbXkbjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnbBcaaaaaachGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaafaafaafaafcnDaafcdjcdjcdjcjQcjRcjScvfcjUcjRaafaaaaafcfDaaaaaaaaaaaaaaaabtaafaafaafaafaafaafaaaaaaaaaaaaaaaaaabXkbsecjWbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcaafaafchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaafaafaaaaaaaaaaaaaaackBcjRbFkckDcuScjRaafaafaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkckFbsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZXckIbZZaaabZXckIbZZaaabZXckIbZZaaaabfaaaaaaaafaafaaaaaaaaaaaaaaabJYbGnbJYaaaaaachGccNckKckLckMckNchGchGchGceKckOckkckPceKceKceKceKceKckQceRckRciHceSceRceRceRckSckTckUceSceSciHceRckVceRceRckWckXceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaafaafaaaaaaaaaaaaaaaaaackYcjRcjScvgcjUcjRaaaaafaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXkbsebuEbjoclabsebsebsebsebsebsebsebjoaafaaaaaaaaaaafaaackGclbckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaabfaaaaaaaaaaafaafaaaaaaaaaaaabJYbGnbJYaaaaaachGclccldcleclfclgclhclicljclhclkcllclmclncloclpclqclrclschLcqqcluclvclwclxclyclzclyclzclAclBclCchLchLclDchLclEcviceKceKceKceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaackYcjRclGclHclIclJaaaaafaafaafaafaaeaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaabXkbXkbXkbjocipbjobjoclKclLbLebMdbjobjoaafaaaaaaaaaaafaaackGckHckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccuOcuLcuLcuNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcuGcuJcuIcuHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaaaaaaaaaaaaafcnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBcbRAbBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccuKcuLcuLcuMaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafcnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBccgPbGncnEbBcaafchGchGchGchGchGaafaaaaaaaafceKcnFceRcnGcnHcnHcnIcgccgccnJceKcnKcnLcnLcnLceKcnMcnNcnOcnPcnQceKcnLcnLcnLcnKceKcnJcgccnRceSceRceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaaaaaaaafaaaaaaaafaaaabfaaaaaaaafaaaaafaaaaaacnSaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcotcoubHMbBccgcccOccOccOccOccOccOccOccOcgcceKcowcoxcoycozcowceKceKceKcnJceKceKcogcogcogcogcoAcoBcoCcoBcoDcogcogcogcogceKceKcnJceKckkcoEcoFcoGcoHceRcoIcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYbJYbJYbJYbBcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcoPcoQcoRaaaaaaaaacogcogcogcogcogcogcogcogcogaaaaaaaaacoScoTcoUcoVcoWclyclycoXcoYcoZcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaabfacfcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpdcpbceKcpecpfceKcgccgccpgcgcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaaaaaaaaaafaaaaaaaaacosaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcphcpicpjaafaafaafcpkaaaaaaaaaaaacpkaaaaaacpkaafaafaafcplcpmcpnceKcpocdIcgcaafaaacppcpqaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpraaaaaaaafaaaaaaaaaaaaaaacpsaaaaaaaaaaafaaaaaacpccpccpbceKaagaagaagaafaaacptcpucpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpycpzaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpAcpBcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpCcpDceKaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacptcpEcpqcnDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafcpkaafaafcpGcpHcpIaafcpJaaaaafaaaaaacpccpFceKceKaaaaaaaagaafaafcnDaafaafcnDaafaafaafaafaafaafaafaafaafaafaafaafcnDaafcpKcpEcpzaafaafcqhcqhcqhcqhcqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaafaaaaaaaaacpLaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcpMceKcpNcpcaaaaaaaafaaaaaaaafcpOcpPcpQaafaaaaaaaafaaaaaacpccpRceKcpMaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcnDaaaaaacpScpEcpqaaacqhbPGbPCcqZcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacmxaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrcuQbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxcuRbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZctzctAafNbERbERbERbwlbwlbERbERbERbwlbwlbwlbWBbBcaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebsbbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaeYctjctkctjaeWaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBaVQbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbpobLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWcuEbLYcuFbMabMbbMcbDnbMdbsbbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYbJYbJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebsbbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbBcbJYbBcbJYbBcbBcbBcbBcbBcbBcbJYbJYbJYbBcbBcbBcbGnbGncvjbGnbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebsbbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBccvkcvlcvlcvlcvmbVEcvnbGnbGnaoybOsbOubOtbGnbGnbGnbGnbGnbJYbJYbJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbpCbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbsbbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvpcvocvrcvqbBcbGnbBcbGnaoybPxbGnbGnbGnbPybBcbJYbJYbBcaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbGTbGUbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagbJYcvscvlcvtcvtcvtbBccvubBccacbBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbxkbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbUobCWbRhbRibKKbRjbKKbRkbRlbCWbUobCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbOpbSsbGVbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvlcvvcvxcvwcvzcvycvBcvAbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbGVbjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafbRzaaabBcbBcbBcbBcbBcbBcbBcbBcbBcbBcbGnbGnbGnbGnbGnbGnbGnbSFbSGbSHbSIbSJbSKbSKbSKbSKbSLbSMbSMbSMbSNcqubSObDybDybSPbBccqnbMqbOAbSQbSRbSSbSTbRQbRQbSUbSVbRQbRQbSWbSXbSYbMFbSZbTabTbbTcbMFbTdbTebTfbOUaafbOVbTgbThbTibMKbMLbNPbTjbTkbTkbTkbTlbLFbTmbQZbTnbTobTpbTqbTrbTsbTsbTtbLFbKvbBMbItbItbItbItbTubTvbRjbTwbTubItbItbItbItbItbTxbTybTzbTAbTBbTCbTCbTCbTCbTDbOmbSqbSqbTEbPvbTFbSsbGVbjobjobjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabStbSubSubSubSubSvbSwbSwbSxbSybSzbSAbSBbSCbSDbSEbBcbTMbJYbJYbJYbJYbJYbJYbJYbJYbDCbTNbTObTObTObTObTObTObTObTObTPbTPcqxbTPbTPbTQbTRbBccqnbMqbOAbSQbTSbTTbTUbTVbPSbTWbTXbPSbPSbTYbTZbUabUbbUcbUdbUebUfbMFbTdbUgbUhbQabQbbNLbUibRYbRYbMKbMLbNPbUjbyebyebyebNYbLFbUkbMUbMUbUlbUmbUnbVibUpbVibUnbLFbKvbBMbQjbQkbQkbUqbQmbKKbQnbQobUrbUsbCWbCWbCWbItbUtbUubUvbUwbRnbRpbUxbUybUzbUAbOpbSqbSqbSqbPvbTFbSsbGVbsebsebjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabJYbJYbJYbGnbTHbTIbTJbTKbTLbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjcvCbzibzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWcqUbCWbVjbRibKKbRjbKKbRkbVkbCWcqUbCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbHzbjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUDbGnbUDbGnbUEbTIbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbVFbVGbVHbVIbVJbUGbVKbVLcqEbVNbVObTPbTRbBccqnbMqbOAbVPbVQbKmbVRbVSbKmbVTbVUbVVbKmbVWbQRbVXbLnbVYbUfbMFbUdbVZbWabRVbWbbNKbLDbNLbWcbWdbWebMKbMLbyebUjbyebABbUZbNYbLFbWfbWgbWhbWibUmbWgbWjbUpbWjbNVbNXbKvbBMbCWbCWbCWbWkbWlbQobSgbKKbShbWmbQkbQkbSjbBMbPvbWnbWobWobPvbPvbWpbWqbWrbWsbWtbWubTCbWvbSqbSqbSsbGVbjobWwbjobWxbjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbJYbJYbJYbVzbVAbVBbVCbVDbGnbVEbGnbJYaaaaaaaaaaaaaaaaaaaaabDCbTNbTObWCbWDbWEbVHbWFbWCbWCbVKbWGcqGcqFbWIbTPbTRbBccqnbMqbWJbWKbWKbWLbWMbWNbWObWPbWQbWRbKmbMFbQRbWSbWTbVYbWUbMFbUdbVZbTdbTebWVbOUaafbOVbWWbWXbWYbMKbMLbyebUjbyebGHbGHbNYbLFbLGbWZbXabLGbXbbLGbLGbLGbLGbLGbLFbKvbBMbItbItbItbItbTubXcbRjbXdbTubItbItbItbItbBMbRrbXebRrbRrbRrbPvbWpbWqbXfbXgbXhbXibUwbXjbPvbSqbSsbGVbjobsebsebsebXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbJYbWybWzbWzbWAbTLbWBbBccvDcvDaaabXlaaaaaaaaaaaaaaabEZbTNbTObWCbWCbXmbXnbXobWCbXpbXqbXrcqIcqHbXsbTPbTRbBccqJbXwbCrbWKbXxbXybXybXzbXAbXBbXCbXDbKmbXEbXFbVXbLnbVYbXGbMFbXHbVZbTdbXIbXJbQabQbbNLbXKbWdbWdbMKbMLbNPbUjcvEbyebXLbNYbXMbSabSabXNbLGbIHbIkbQBbyebXRbXSbKwbKvbBMbQjbQkbQkbXTbQmbKKbQnbQobXUbXVbCWbCWbCWbBMbXWbRrbRrbRrbRrbPvbXXbXXbXYbXZbOpbOpbUwbOpbPvbOpbSsbGVbjobYabYbbYcbXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabqabfabfabfabfabfaaaaaabBcbBcbBcbBcbBcbBcbVEbBcbBcbBcbBcaafaaaaaaaafaaIbYdaaaaaaaaabEZbTNbTObYebYfbYgbYhbYibYjbYkbYlbYmcqMcqKbYobTPbYpbYqbYrbYsbGybWKbYtbXybYubYvbYwbYxbYybYzbYAbNFbYBbLnbLnbLnbYCbMFbYDbYEbTdbTebMFbOUaafbMKbMKbMKbMKbMKbMLbNPcbxcvFbyebYFbYGbYHbTkbYIbYJbyebRybQCbTGbyebYNbKFbYObYPbBMbCWbUobCWbYQbRibKKbRjbKKbRkbYRbCWbUobCWbBMbYSbRrbYTbRrbRrbYUbYVbYWbYXbYYbOpbUwbUwbYZbPvbBRbZabUBbjobZcbZdbsebXkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaacfaaaaafaaaaafaaaabfaafaafbBcbGnbGnbGnbGnbGnbGnbGnbGnbWBbJYaaaaaaaaaaaIbZfbZgaaIaaIaafbEZbTNbTObZhbWCbUGbUGbUGbWCbZibZjbZkcqGcqNcqPbTPbBcbBcbZnbZobZpbWKbWKbZqbXybZrbZsbZtbZsbZubKmbMFbZvbZwbZxbZybONbZzbZAbZBbWabRVbZCbNKbLDbNLbZDbZEbZEbMKbMLbNPbyecvGbyebyebZFbZGbyebZHbZIbyebyebZJbyebyebZIbZKbZLbZMbBMbCWbCWbCWbZNbZObQobZPbKKbShbZQbQkbQkbSjbBMbRrbRrbZRbRrbRrbPvbXXbXXbZSbZTbOpbZUbZVbZWbPvboUbZabGVbjobjobjobsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXbZYbZZaaabZXbZYbZZaaabZXbZYbZZaaaabfaaaaaabJYbZebGnbBcbBcbBcbRAbBcbBcbBcbBcaaaaaaaaacafaaIaaIaafaaaaaabEZbTNbTObWCcagcahbUGcaibWCbWCbVKcajcqGcqKcakbTPcalcamcancaocapcaqcarcascatcascatcaucatcavbKmcawcaxcaybPSbPSbPUbRPcazbRUbPVbTecaAbOUaafbOVcaBcaCcaDbMKbMLbyebzibUjcaEcaFbZFcaGbyebZHcaHcaIcaJcaKcaLcaIcaMbZHbgxcaNbBMbBMbBMbBMbBMbBMcaOcaPcaObBMbBMbBMbBMbBMbBMbPvbPvbPvbPvbPvbPvcaQcaQcaRcaSbPvbPvbPvbPvbPvbjobRxbGVbjocaTcaUbsebjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXcaVbZZaaabBccaVbZZaaabZXcaVbZZaafaafaaaaaabJYcaacabbBccacbGnbGncadbOucaebBcaaaaaaaaaaaaaafaaaaaaaaaaaabDCbTNbTObUGcaYcaZbUGcbacbbbUGbVKcbccqEcqQcqVcuPcqXcqWbOAaZDcbgcbhcbicbjcbkcblcbmcbnbXycbobKmcbpbMFbZvbRPbRQcbqcbrcbscbtbLAcbucbvbQabQbbNLcbwbZEbZEbMKbMLbyebzicvHcbzcbAcbBcbCbyecbDcbEcbFcbGcbHcbGcbIcbEcbJbgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjocbMbMfbkGcbNcbNbPvcbOcbOcaRbQtcbPcbQbsebsebsebBRbRxbHzbjocbRbsebsebjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXcaVbZZaafbZXcaVbZZaafbZXcaVbZZaaaaafaafaafbBcbJYbBcbBcbBccvIcvKcvJbGnbQDbBcaaaaaaaaaaaaaafaaaaaaaafaaabDCbTNbTObUGcbScbTcbUcbVcbWbUGcbXcbYcbZccaccbbTPccccqYcceccfccgcchcciccjcckcclccmccnccoccpccqccrbMFbZvcctbMFbMFbMFcctcctcctbTeaVSaVRaafbMKbMKbMKbMKbMKbMLbyebYFccuccvccwccxccybyebyecczcdncdnbKwccCccDbyebyebgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjobseccEbqvccFccGbPvccHccHccIbQtbPvbOpbjoccJccKbBRbRxbGVbsebsebsebUCbkHbVybkHaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaafaafbBcccRbBccaWcaXcvLbRAbBcbBcaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmbMFbOQccscctbMFbMFbMFbMHbSYcctbTecctbKmaafaafaafaafaafaafbMLcdjcdjcdjcdkcvdcdjcdjcdjcvMcvOcvNcdncvPcdncdnbyecvQbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbUBbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccvRbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhcctbKmbKmbKmaaaaaaaafaaacdVcdWcdXcdYcdZceacebceccdjcvSbziccBcvTbKwcvUccBbzibzicvVbntceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqbXOcesbjobjocetceoceuceocevbGVbjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacexaaaaaaaaacexaaaaaaaaacexaaaaaaaafcducducduceycezceAceBceCbGnceDceEceFceEceEceEceEceEceEceEceEceEceEceGceHbRGceIceJceKceKceKceKceKceKceKceKceKceKceKceKceKceKccTccUceLceMceNceOcePceQceRceSceTceKcdbcdLcdMcdNcdOcdPcdQcdRbMFcdScdTcdUbLCcdibLCaaaaaaaafaaacdjceXceYceZcfacfbcfccfdcdjbzibzicdncdnbyecdnccBbDZbFMcfkcflcflcflcflcflcflcflcfmcfncflcflcflcflcflcflcfocfpcfqbmicfrcfscftcftcftbXPbYKbXkbYMbYLcbfbZbbZbccLccMbjocaUbsecfCbjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafalkcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKbKmcsKbLuceVbLuceUbLuceVbLuceWbLucsNbKmbKmbKmaafaafaafaaacdjcgqcgrcgscgtcvWcgvcgwcdjcvXbziccBccBcvYcdnccBccBcvZbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbsebXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacgLaaaaaaaaacgLaaaaaaaaacgLaaaaaaaafcducducducgMcgNcgOcdvbGnbGnbGnbGnbBcaaaaaaaafaaaaaaaafaaaaaaaafaaabBccgPbBccgQcgRceKcgScgTcgUcgVcgWcgXceRceRceRcgYcgZchachbcgXccUchcchdchecgictIccUchgchhchiceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaafaafaaaaaaaaaaafaafcdjchmchnchochpchqchrchschtchucwbcwaccBbKwccBcwccdnbyebyeaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabXkbsebXkaaabjochybLebjochzbZabjoaaaaaaaaaaaabjobsebZachAchBchBchCchDchBaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcbBcbJYchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaafcihciichncijcikcilcimcincdjcdmcdncdncdncdocdncdncdnbABabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabXkbsebXkaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcciwbHNchGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcvecjhcjicdjcedcwdcefcegcehccBccBccBbziabtaaaaaaaaaaaaaaaaafaaabXkbXkbXkbjobjobWwbjobjobjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnceFbGnbZechGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaafaafaafaafcnDaafcdjcdjcdjcjQcjRcjScvfcjUcjRcedcweccBcffcfgcfhcficcBcwfcvDaafaafaafaafaafaafaaabXkbsecwgbjobsebsebseclKbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcbBcbBcchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaafaafaaaaaaaaaaaaaaackBcjRbFkckDcuScjRbzicwhcgycgzcgAcgBbDZcwicgDabtaaaaaaaaaaaaaaaaafaaabXkckFcwjbsebsebsebsebsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZXckIbZZaaabZXckIbZZaaabZXckIbZZaaaabfaaaaaaaafaafaaaaaaaaaaaaaaabJYbGnbJYaaaaaachGccNckKckLckMckNchGchGchGceKckOckkckPceKceKceKceKceKckQceRckRciHceSceRceRceRckSckTckUceSceSciHceRckVceRceRckWckXceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaafaafaaaaaaaaaaaaaaaaaackYcjRcjScvgcjUcjRbyecwkbFMchvchwbFMchxbyebyeabtaaaaaaaaaaaaaaaaafaaabXkbsecwlbjoclKbsebsecwmbjoclabsebsebsebsebsebsebsebjoaafaaaaaaaaaaafaaackGclbckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaabfaaaaaaaaaaafaafaaaaaaaaaaaabJYbGnbJYaaaaaachGclccldcleclfclgclhclicljclhclkcllclmclncloclpclqclrclschLcqqcluclvclwclxclyclzclyclzclAclBclCchLchLclDchLclEcviceKceKceKceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaackYcjRclGclHclIclJaafbyecczciobNPbNPbyebyeaaaaafaaaaaaaaaaaaaaaaafaafbXkbXkbXkbjobjobjobsebjobjocipbjobjoclKclLbLebMdbjobjoaafaaaaaaaaaaafaaackGckHckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccuOcuLcuLcuNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabjocwjcwnbjocmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcuGcuJcuIcuHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaabjocwjbsebjocnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBccwobBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccuKcuLcuLcuMaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabjobjobjobsebjocnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBccgPbGncnEbBcaafchGchGchGchGchGaafaaaaaaaafceKcnFceRcnGcnHcnHcnIcgccgccnJceKcnKcnLcnLcnLceKcnMcnNcnOcnPcnQceKcnLcnLcnLcnKceKcnJcgccnRceSceRceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbjobjocwpbsebsebjoaaaaaaaaaaafaaaaaaaafaaaabfaaaaaaaafaaaaafaaaaaacnSaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagbjobXkbjocwqbsebsebsebjoaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcotcoubHMbBccgcccOccOccOccOccOccOccOccOcgcceKcowcoxcoycozcowceKceKceKcnJceKceKcogcogcogcogcoAcoBcoCcoBcoDcogcogcogcogceKceKcnJceKckkcoEcoFcoGcoHceRcoIcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagcwrbsecwrcwscwscwtbsebjoaaaaaaaaaaaaaaaaaaaafaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYbJYbJYbJYbBcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcoPcoQcoRaaaaaaaaacogcogcogcogcogcogcogcogcogaaaaaaaaacoScoTcoUcoVcoWclyclycoXcoYcoZcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagbjobXkbjocwvcwucwwbjobjoaafaaaaaaaaaaaaaaaaafaaaabfacfcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpdcpbceKcpecpfceKcgccgccpgcgcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabjobjobjobjobjoaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaaaaaaaaaafaaaaaaaaacosaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcphcpicpjaafaafaafcpkaaaaaaaaaaaacpkaaaaaacpkaafaafaafcplcpmcpnceKcpocdIcgcaafaaacppcpqaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpraaaaaaaafaaaaaaaaaaaaaaacpsaaaaaaaaaaafaaaaaacpccpccpbceKaagaagaagaafaaacptcpucpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpycpzaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpAcpBcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpCcpDceKaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacptcpEcpqcnDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafcpkaafaafcpGcpHcpIaafcpJaaaaafaaaaaacpccpFceKceKaaaaaaaagaafaafcnDaafaafcnDaafaafaafaafaafaafaafaafaafaafaafaafcnDaafcpKcpEcpzaafaafcqhcqhcqhcqhcqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaafaaaaaaaaacpLaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcpMceKcpNcpcaaaaaaaafaaaaaaaafcpOcpPcpQaafaaaaaaaafaaaaaacpccpRceKcpMaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcnDaaaaaacpScpEcpqaaacqhbPGbPCcqZcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacmxaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafaaacpTaafcpUcpVcpWaafaafcpkaafaaaaaacpccpFceKceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacpXcpYcpqcqhcrecracrjcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcpZcqacpZcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpCcpDcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpAcpBceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcpXcqbcqhcrlcqvcrncqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacmxaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccqcaaaaaacqdaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacpccpccpbceKaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecqfcqhcrucqwcrvcqhcqecqeaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 073b419bd3d6267c58263d4f4b7443fdedd89cc7 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Tue, 21 Jul 2015 04:21:38 +1000 Subject: [PATCH 41/65] fixes kick and ca links in pp --- code/modules/admin/player_panel.dm | 2 +- code/modules/admin/secrets.dm | 22 ---------------------- code/modules/admin/topic.dm | 23 +++++++++++++++++++++++ 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 5c290f9ba11..1320ae695c2 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -194,7 +194,7 @@ Player panel
      - Hover over a line to see more information - Check antagonists - Kick everyone/AFKers in lobby + Hover over a line to see more information - Check antagonists - Kick everyone/AFKers in lobby

      diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 3aa09ecd6b3..737f1110cb8 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -166,11 +166,6 @@ dat += "[sig]
      " usr << browse(dat, "window=lawchanges;size=800x500") - if("check_antagonist") - if(!check_rights(R_ADMIN)) - return - check_antagonists() - if("moveminingshuttle") if(!check_rights(R_ADMIN)) return @@ -198,23 +193,6 @@ message_admins("[key_name_admin(usr)] moved the centcom ferry") log_admin("[key_name(usr)] moved the centcom ferry") - if("kick_all_from_lobby") - if(!check_rights(R_ADMIN)) - return - if(ticker && ticker.current_state == GAME_STATE_PLAYING) - var/afkonly = text2num(href_list["afkonly"]) - if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby??","Message","Yes","Cancel") != "Yes") - usr << "Kick clients from lobby aborted" - return - var/list/listkicked = kick_clients_in_lobby("The admin [usr.ckey] issued a 'kick all clients from lobby' command.", afkonly) - var/strkicked = "" - for(var/name in listkicked) - strkicked += "[name], " - message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") - log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") - else - usr << "You may only use this when the game is running" - if("showailaws") if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 062cc7f9378..bcc55ee136a 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2056,3 +2056,26 @@ var/datum/newscaster/feed_message/FM = locate(href_list["ac_lock_comment"]) FM.locked ^= 1 src.access_news_network() + + else if(href_list["check_antagonist"]) + if(!check_rights(R_ADMIN)) + return + check_antagonists() + + else if(href_list["kick_all_from_lobby"]) + if(!check_rights(R_ADMIN)) + return + if(ticker && ticker.current_state == GAME_STATE_PLAYING) + var/afkonly = text2num(href_list["afkonly"]) + if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby??","Message","Yes","Cancel") != "Yes") + usr << "Kick clients from lobby aborted" + return + var/list/listkicked = kick_clients_in_lobby("You were kicked from the lobby by an Administrator.", afkonly) + + var/strkicked = "" + for(var/name in listkicked) + strkicked += "[name], " + message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") + log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") + else + usr << "You may only use this when the game is running" \ No newline at end of file From c88e901a1bbe47eff715997a81eb4c371ccbf6c3 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 20 Jul 2015 19:48:37 +0100 Subject: [PATCH 42/65] Readds spawn() proc to icon smoothing code. --- code/__HELPERS/icon_smoothing.dm | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index f8a2cf29db5..0de55b127be 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -45,20 +45,21 @@ return adjacencies /proc/smooth_icon(atom/A) - if(A && A.smooth) - var/adjacencies = calculate_adjacencies(A) + spawn(0) //don't remove this, otherwise smoothing breaks + if(A && A.smooth) + var/adjacencies = calculate_adjacencies(A) - clear_overlays(A) + clear_overlays(A) - A.top_left_corner = make_nw_corner(adjacencies) - A.top_right_corner = make_ne_corner(adjacencies) - A.bottom_left_corner = make_sw_corner(adjacencies) - A.bottom_right_corner = make_se_corner(adjacencies) + A.top_left_corner = make_nw_corner(adjacencies) + A.top_right_corner = make_ne_corner(adjacencies) + A.bottom_left_corner = make_sw_corner(adjacencies) + A.bottom_right_corner = make_se_corner(adjacencies) - A.overlays += A.top_left_corner - A.overlays += A.top_right_corner - A.overlays += A.bottom_right_corner - A.overlays += A.bottom_left_corner + A.overlays += A.top_left_corner + A.overlays += A.top_right_corner + A.overlays += A.bottom_right_corner + A.overlays += A.bottom_left_corner /proc/make_nw_corner(adjacencies) From 9108dbba42ae3faf943296e91f84e4976e04b5d8 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 20 Jul 2015 10:41:04 -0700 Subject: [PATCH 43/65] Makes shuttle rotate Re-Smooth's atoms if need be. --- code/modules/shuttle/shuttle.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 600795a4f5a..17c57e80413 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -270,9 +270,14 @@ //default shuttleRotate /atom/proc/shuttleRotate(rotation) + //rotate our direction dir = angle2dir(rotation+dir2angle(dir)) - //we need to rotate the pixel offsets too. + //resmooth if need be. + if(A.smooth) + smooth_icon(A) + + //rotate the pixel offsets too. if (pixel_x || pixel_y) if (rotation < 0) rotation += 360 From 8418ea6d0220d3f5be3338497db8e68bcbd2562e Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 20 Jul 2015 10:58:19 -0700 Subject: [PATCH 44/65] fixes shuttle rotate compile error --- code/modules/shuttle/shuttle.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 17c57e80413..cbb37c661d3 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -274,8 +274,8 @@ dir = angle2dir(rotation+dir2angle(dir)) //resmooth if need be. - if(A.smooth) - smooth_icon(A) + if(smooth) + smooth_icon(src) //rotate the pixel offsets too. if (pixel_x || pixel_y) From 96892914d6f3cba31246401643f49fc082701419 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Mon, 20 Jul 2015 22:20:49 +0000 Subject: [PATCH 45/65] Automatic changelog compile --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/AnturK-LB.yml | 36 ------------------------------ 3 files changed, 7 insertions(+), 36 deletions(-) delete mode 100644 html/changelogs/AnturK-LB.yml diff --git a/html/changelog.html b/html/changelog.html index b902098032b..a66b027989b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,10 @@ -->

      20 July 2015

      +

      AnturK updated:

      +
        +
      • Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage to each target depending on the chargeup
      • +

      KorPaheron updated:

      • Added the Multiverse Sword, a new wizard artifact that can summon clones of yourself from other universes, allowing for dangerous amounts of recursion.
      • diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 82f6d3ee089..5942fab3efb 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1275,6 +1275,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. MMMiracles: - soundadd: Adds a TWANG sound effect when hitting things with a guitar. 2015-07-20: + AnturK: + - tweak: Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage + to each target depending on the chargeup KorPaheron: - rscadd: Added the Multiverse Sword, a new wizard artifact that can summon clones of yourself from other universes, allowing for dangerous amounts of recursion. diff --git a/html/changelogs/AnturK-LB.yml b/html/changelogs/AnturK-LB.yml deleted file mode 100644 index e086a125e6a..00000000000 --- a/html/changelogs/AnturK-LB.yml +++ /dev/null @@ -1,36 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# spellcheck (typo fixes) -# experiment -# tgs (TG-ported fixes?) -################################# - -# Your name. -author: AnturK - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - tweak: "Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage to each target depending on the chargeup" From 62f6e3af4343637ef76e5910c99ad3736f6d50b9 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 21 Jul 2015 01:50:19 +0000 Subject: [PATCH 46/65] Automatic changelog compile --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 9 +++++++++ html/changelogs/fayrik-putadonksoftonit.yml | 6 ------ html/changelogs/phil235-CatchThrownPieFix.yml | 8 -------- 4 files changed, 19 insertions(+), 14 deletions(-) delete mode 100644 html/changelogs/fayrik-putadonksoftonit.yml delete mode 100644 html/changelogs/phil235-CatchThrownPieFix.yml diff --git a/html/changelog.html b/html/changelog.html index a66b027989b..6bd224a07fc 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,16 @@ -->
        +

        21 July 2015

        +

        Fayrik updated:

        +
          +
        • Syndicate Donksoft gear now costs less.
        • +
        +

        phil235 updated:

        +
          +
        • Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed.
        • +
        +

        20 July 2015

        AnturK updated:

          diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 5942fab3efb..a7dfecdf898 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1294,3 +1294,12 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Mechs now properly consume energy when moving and having their lights on. - rscadd: Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill). +2015-07-21: + Fayrik: + - tweak: Syndicate Donksoft gear now costs less. + phil235: + - tweak: Thrown things no longer bounces off walls, unless they're in no gravity. + Heavy items and mobs thrown can push the mobs and non anchored objects they + land on. Throwing a mob onto a mob in no gravity will push each one in opposite + direction. Thrown mobs landing on wall, or dense object or mob gets stunned + and a bit injured. The damage when mob hit a wall is nerfed. diff --git a/html/changelogs/fayrik-putadonksoftonit.yml b/html/changelogs/fayrik-putadonksoftonit.yml deleted file mode 100644 index fb12d1cfd93..00000000000 --- a/html/changelogs/fayrik-putadonksoftonit.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Fayrik - -delete-after: True - -changes: - - tweak: "Syndicate Donksoft gear now costs less." \ No newline at end of file diff --git a/html/changelogs/phil235-CatchThrownPieFix.yml b/html/changelogs/phil235-CatchThrownPieFix.yml deleted file mode 100644 index 4f467b01345..00000000000 --- a/html/changelogs/phil235-CatchThrownPieFix.yml +++ /dev/null @@ -1,8 +0,0 @@ - -author: phil235 - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -changes: - - tweak: "Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed." From 369154a8d83931b6d72ed0df5c4643bb23438341 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 17 Jul 2015 22:41:50 +0100 Subject: [PATCH 47/65] Fixed infinite solar panel exploit. Fixed being able to anchor solar assemblies in space. --- code/modules/power/solar.dm | 45 ++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 480fb8380b2..ab650dfa411 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -223,33 +223,36 @@ /obj/item/solar_assembly/attackby(obj/item/weapon/W, mob/user, params) - if(!anchored && isturf(loc)) - if(istype(W, /obj/item/weapon/wrench)) - anchored = 1 + if(istype(W, /obj/item/weapon/wrench) && isturf(loc)) + if(isinspace()) + user << "You can't secure [src] here." + return + anchored = !anchored + if(anchored) user.visible_message("[user] wrenches the solar assembly into place.", "You wrench the solar assembly into place.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return 1 - else - if(istype(W, /obj/item/weapon/wrench)) - anchored = 0 + else user.visible_message("[user] unwrenches the solar assembly from its place.", "You unwrench the solar assembly from its place.") playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return 1 + return 1 - if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) - var/obj/item/stack/sheet/S = W - if(S.use(2)) - glass_type = W.type - playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.") - if(tracker) - new /obj/machinery/power/tracker(get_turf(src), src) - else - new /obj/machinery/power/solar(get_turf(src), src) + if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) + if(!anchored) + user << "You need to secure the assembly before you can add glass." + return + var/obj/item/stack/sheet/S = W + if(S.use(2)) + glass_type = W.type + playsound(src.loc, 'sound/machines/click.ogg', 50, 1) + user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.") + if(tracker) + new /obj/machinery/power/tracker(get_turf(src), src) else - user << "You need two sheets of glass to put them into a solar panel!" - return - return 1 + new /obj/machinery/power/solar(get_turf(src), src) + else + user << "You need two sheets of glass to put them into a solar panel!" + return + return 1 if(!tracker) if(istype(W, /obj/item/weapon/tracker_electronics)) From 59217b2b063ce720adeea4734d67ff53b562d06b Mon Sep 17 00:00:00 2001 From: Incoming Date: Mon, 20 Jul 2015 23:06:42 -0400 Subject: [PATCH 48/65] Adds a server admin version of end round now; a semi obscure admin tool that came about in the mulligan push but never really got advertised. It will print out a round end report and attempt to database round stats before restarting. Suggested use is when the round has SLOWED down to an unplayble crawl for some reason but the game is still technically responcive. Pressing end round doesn't preclude the use of reset if it doesn't seem to be working, but end round should usually be tried first. Removes the 20 second confirmation between prompts for the normal admin version of end round now. If admins force end a round escape objectives will be good faith greentexted if the antagonists were still in a position to escape alive. The survival rate will always be printed at round end now, even if the shuttle makes it to centcom (evac rate will be printed too in that case). --- code/controllers/subsystem/ticker.dm | 3 +-- code/game/gamemodes/objective.dm | 6 ++++-- code/modules/admin/admin.dm | 14 ++++++++++++++ code/modules/admin/admin_verbs.dm | 1 + code/modules/admin/topic.dm | 1 - 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 599563b1c81..9b191785071 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -370,8 +370,7 @@ var/datum/subsystem/ticker/ticker world << "
          [TAB]Total Population: [joined_player_list.len]" if(station_evacuated) world << "
          [TAB]Evacuation Rate: [num_escapees] ([round((num_escapees/joined_player_list.len)*100, 0.1)]%)" - else - world << "
          [TAB]Survival Rate: [num_survivors] ([round((num_survivors/joined_player_list.len)*100, 0.1)]%)" + world << "
          [TAB]Survival Rate: [num_survivors] ([round((num_survivors/joined_player_list.len)*100, 0.1)]%)" world << "
          " //Silicon laws report diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 0ea208a2fcd..379720fcca3 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -247,10 +247,12 @@ return 0 if(isbrain(owner.current)) return 0 - if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 0 if(!owner.current || owner.current.stat == DEAD) return 0 + if(ticker.force_ending) //This one isn't their fault, so lets just assume good faith + return 1 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 var/turf/location = get_turf(owner.current) if(!location) return 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 9d8c74ea4f8..8f57064f66d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -418,6 +418,20 @@ var/global/floorIsLava = 0 feedback_add_details("admin_verb","R") //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") + ticker.force_ending = 1 + feedback_add_details("admin_verb","ER") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /datum/admins/proc/announce() set category = "Special Verbs" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 194a4437e55..b6132dbf816 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -98,6 +98,7 @@ var/list/admin_verbs_spawn = list( var/list/admin_verbs_server = list( /datum/admins/proc/startnow, /datum/admins/proc/restart, + /datum/admins/proc/end_round, /datum/admins/proc/delay, /datum/admins/proc/toggleaban, /client/proc/toggle_log_hrefs, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 062cc7f9378..e66b3945ed7 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -352,7 +352,6 @@ message_admins("[key_name_admin(usr)] is considering ending the round.") if(alert(usr, "This will end the round, are you SURE you want to do this?", "Confirmation", "Yes", "No") == "Yes") - spawn(200) //I wish you would step back from that ledge my friend if(alert(usr, "Final Confirmation: End the round NOW?", "Confirmation", "Yes", "No") == "Yes") message_admins("[key_name_admin(usr)] has ended the round.") ticker.force_ending = 1 //Yeah there we go APC destroyed mission accomplished From 256d309e2c9d1bc9f2adc2689fc9c7177b93449f Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Tue, 21 Jul 2015 01:17:38 -0500 Subject: [PATCH 49/65] Multisword fixes Removes colons. Fixes the augmented guy not actually getting his augments and the soviet one not spawning with a sword. Adds officer and gladiator costumes as choices. --- code/game/gamemodes/wizard/artefact.dm | 38 +++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 6c157589fd2..a52d8b8e2e9 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -280,8 +280,8 @@ var/global/list/multiverse = list() log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.") else var/datum/objective/protect/new_objective = new /datum/objective/protect - new_objective.owner = M:mind - new_objective:target = usr:mind + new_objective.owner = M.mind + new_objective.target = usr.mind new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones." M.mind.objectives += new_objective M << "Objective #[1]: [new_objective.explanation_text]" @@ -295,7 +295,7 @@ var/global/list/multiverse = list() sword.faction = list("[assigned]") sword.evil = evil - var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet") + var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet", "officer", "gladiator") switch(randomize) if("mobster") @@ -340,6 +340,7 @@ var/global/list/multiverse = list() M.organs += new /obj/item/organ/limb/robot/r_leg M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(sword, slot_r_hand) + if("syndicate") M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) @@ -349,29 +350,34 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask) M.equip_to_slot_or_del(sword, slot_r_hand) + if("assistant") M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) M.equip_to_slot_or_del(sword, slot_r_hand) + if("animu") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform) M.equip_to_slot_or_del(sword, slot_r_hand) + if("cultist") M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(sword, slot_r_hand) + if("highlander") M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) M.equip_to_slot_or_del(sword, slot_r_hand) + if("clown") M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) @@ -379,6 +385,7 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) M.equip_to_slot_or_del(sword, slot_r_hand) + if("killer") M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes) @@ -393,13 +400,15 @@ var/global/list/multiverse = list() for(var/obj/item/carried_item in M.contents) if(!istype(carried_item, /obj/item/weapon/implant)) carried_item.add_blood(M) + if("pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(sword, slot_r_hand) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("soviet") M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) @@ -407,6 +416,26 @@ var/global/list/multiverse = list() M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("officer") + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/miljacket(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("gladiator") + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/gladiator(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/gladiator(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + else return @@ -420,6 +449,7 @@ var/global/list/multiverse = list() all_species += speciestype hardset_dna(M, null, null, null, null, pick(all_species)) M.update_icons() + M.update_augments() var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id W.icon_state = "centcom" From a7d3f8f36ecf55b7da67023dc933e28187ca1408 Mon Sep 17 00:00:00 2001 From: Dorsisdwarf Date: Tue, 21 Jul 2015 11:56:12 +0100 Subject: [PATCH 50/65] Creates 'pockets', cuts down bloat, reduces cut-throughs --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 286 +++++++++--------- 1 file changed, 146 insertions(+), 140 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index c43a83c3ef7..55cc3d32574 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -855,8 +855,8 @@ "aqw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqx" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqy" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"aqz" = (/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"aqA" = (/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"aqz" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"aqA" = (/obj/item/weapon/cigbutt/cigarbutt,/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqB" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aqC" = (/turf/simulated/wall,/area/maintenance/fpmaint) "aqD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -965,7 +965,7 @@ "asC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall,/area/maintenance/fpmaint2) "asD" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/space) "asE" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/space) -"asF" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"asF" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asG" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asH" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 35},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asI" = (/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1028,7 +1028,7 @@ "atN" = (/obj/structure/mirror{icon_state = "mirror_broke"; pixel_y = 28; shattered = 1},/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/circuitboard/operating,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atO" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed/chair,/obj/item/weapon/reagent_containers/blood/random,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atP" = (/obj/item/weapon/airlock_painter,/obj/structure/lattice,/obj/structure/closet,/turf/space,/area/space) -"atQ" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bedsheet,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"atQ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atR" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "atS" = (/obj/machinery/door/airlock/external{req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "atT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -1079,7 +1079,7 @@ "auM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "auN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/fpmaint) "auO" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"auP" = (/obj/machinery/computer/slot_machine{balance = 15; money = 500},/obj/item/weapon/coin/iron,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/diamond,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"auP" = (/obj/structure/stool/bed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bedsheet,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "auQ" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/turf/simulated/wall,/area/maintenance/fpmaint) "auR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "auS" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -3772,7 +3772,7 @@ "buB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "buC" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) "buD" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/explab) -"buE" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/toy/sword,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"buE" = (/obj/machinery/computer/slot_machine{balance = 15; money = 500},/obj/item/weapon/coin/iron,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/diamond,/obj/item/weapon/coin/diamond,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "buF" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/quartermaster/storage) "buG" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) "buH" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/quartermaster/storage) @@ -4660,7 +4660,7 @@ "bLF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/medical/virology) "bLG" = (/turf/simulated/wall/r_wall,/area/medical/virology) "bLH" = (/turf/simulated/wall,/area/medical/virology) -"bLI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/noticeboard{dir = 8; pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bLI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/toy/sword,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bLJ" = (/obj/structure/sign/biohazard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/medical/virology) "bLK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Xenobiology Maintenance"; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) @@ -4744,7 +4744,7 @@ "bNl" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/mixing) "bNm" = (/obj/item/target,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/toxins/test_area) "bNn" = (/obj/machinery/light_construct{dir = 8},/turf/simulated/floor/plating,/area/construction) -"bNo" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bNo" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/noticeboard{dir = 8; pixel_x = 27; pixel_y = 0},/obj/item/trash/plate,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bNp" = (/obj/machinery/light_construct{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction) "bNq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/construction) "bNr" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -4941,7 +4941,7 @@ "bRa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{name = "Break Room"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRc" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bRd" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bRd" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bRe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/firealarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRg" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera{c_tag = "Virology Module"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -5292,7 +5292,7 @@ "bXN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/medical/virology) "bXO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bXP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bXQ" = (/obj/item/weapon/airalarm_electronics,/obj/item/weapon/circuitboard/seed_extractor,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bXQ" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bXR" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXS" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXT" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) @@ -5482,7 +5482,7 @@ "cbv" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cbw" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cbx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cby" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) +"cby" = (/obj/item/trash/sosjerky,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cbz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5536,7 +5536,7 @@ "ccx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccy" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccz" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/maintenance/asmaint) -"ccA" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) +"ccA" = (/obj/item/weapon/airalarm_electronics,/obj/item/weapon/circuitboard/seed_extractor,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ccB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccC" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccD" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/l3closet,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5584,7 +5584,7 @@ "cdt" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cdu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cdv" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cdw" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/maintenance/fpmaint2) +"cdw" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) "cdx" = (/obj/structure/closet/wardrobe/black,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/aft) "cdy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft) "cdz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5618,7 +5618,7 @@ "ceb" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/trunk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cec" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ced" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cee" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cee" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) "cef" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5670,12 +5670,12 @@ "cfb" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cfc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cfd" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cfe" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cfe" = (/obj/effect/decal/cleanable/egg_smudge,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cff" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfg" = (/obj/structure/disposalpipe/junction{dir = 2; icon_state = "pipe-y"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfh" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfi" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cfj" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cfj" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cfk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/asmaint) "cfl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cfm" = (/obj/structure/stool/bed/chair,/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5738,15 +5738,15 @@ "cgr" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgs" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgt" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cgu" = (/obj/structure/table,/obj/item/weapon/stamp,/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cgu" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cgv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgw" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cgx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Observatory"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cgx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cgy" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgB" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cgC" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2) +"cgC" = (/turf/simulated/floor/plasteel/airless,/area/space) "cgD" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cgF" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5883,7 +5883,7 @@ "cjg" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cji" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cjj" = (/obj/machinery/monkey_recycler,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/turf/simulated/floor/plating,/area/space) +"cjj" = (/obj/structure/table,/obj/item/weapon/stamp,/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cjk" = (/obj/structure/rack,/obj/structure/disposalpipe/segment,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjl" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5922,7 +5922,7 @@ "cjT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "cjU" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cjV" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cjW" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cjW" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2) "cjX" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint2) "cjY" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjZ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5954,7 +5954,7 @@ "ckz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "ckA" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "ckB" = (/obj/structure/lattice,/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Incinerator Output Pump"; on = 1},/turf/space,/area/space) -"ckC" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"ckC" = (/obj/machinery/monkey_recycler,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ckD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator) "ckE" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "ckF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6405,7 +6405,7 @@ "cti" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "ctj" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/labor) "ctk" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating,/area/shuttle/labor) -"ctl" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (NORTH)"; dir = 1},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"ctl" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ctm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/aisat) "ctn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "cto" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) @@ -6489,7 +6489,7 @@ "cuO" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_4) "cuP" = (/obj/machinery/door/airlock/engineering{name = "Telecommunications"; req_access_txt = "61"},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "cuQ" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) -"cuR" = (/turf/indestructible,/area/toxins/test_area) +"cuR" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cuS" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; on = 1},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/doorButtons/access_button{idSelf = "incinerator_access_control"; idDoor = "incinerator_airlock_interior"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cuT" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "cuU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -6507,72 +6507,78 @@ "cvg" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Turbine Exterior Airlock"; req_access_txt = "32"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cvh" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cvi" = (/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) -"cvj" = (/turf/simulated/floor/plating,/area/space) -"cvk" = (/obj/machinery/vending/boozeomat,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft) -"cvl" = (/turf/simulated/floor/wood,/area/maintenance/aft) -"cvm" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/aft) -"cvn" = (/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvo" = (/obj/structure/table/wood,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/aft) -"cvp" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvq" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/wood,/area/maintenance/aft) -"cvr" = (/obj/structure/table/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) -"cvs" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvt" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvu" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvv" = (/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) -"cvw" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/aft) -"cvx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/wood,/area/maintenance/aft) -"cvy" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvA" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{tag = "icon-connector_map (WEST)"; icon_state = "connector_map"; dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvB" = (/obj/structure/grille,/obj/structure/window/fulltile,/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"cvC" = (/obj/structure/door_assembly/door_assembly_mai,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/space) -"cvE" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) -"cvF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvI" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvJ" = (/obj/effect/spawner/lootdrop/maintenance,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/aft) -"cvM" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/toy/minimeteor,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvN" = (/obj/structure/disposalpipe/segment,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvO" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/c_tube,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvQ" = (/obj/structure/mopbucket,/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvS" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) -"cvT" = (/obj/structure/disposalpipe/segment,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvU" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvW" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cvX" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvZ" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/latexballon,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwa" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwb" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) -"cwc" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/cigbutt/roach,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwd" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/general/hidden{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwe" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwf" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwg" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) -"cwh" = (/obj/machinery/light/small,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwi" = (/obj/machinery/light/small,/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/clipboard,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwj" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) -"cwk" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) -"cwl" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) -"cwm" = (/obj/structure/table,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cwn" = (/obj/structure/table_frame,/obj/item/weapon/wirerod,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/asmaint2) -"cwo" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cwp" = (/obj/structure/stool/bed/dogbed,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cwq" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cwr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cws" = (/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) -"cwt" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cwu" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) -"cwv" = (/obj/machinery/space_heater,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) -"cww" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2) +"cvj" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cvk" = (/turf/indestructible{desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; name = "hyper-reinforced wall"},/area/toxins/test_area) +"cvl" = (/obj/structure/barricade/wooden,/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvm" = (/turf/simulated/floor/plating,/area/space) +"cvn" = (/obj/machinery/vending/boozeomat,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft) +"cvo" = (/obj/effect/decal/cleanable/robot_debris/old,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvp" = (/turf/simulated/floor/wood,/area/maintenance/aft) +"cvq" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/aft) +"cvr" = (/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvs" = (/obj/machinery/door/airlock/maintenance{name = "Maint Bar Access"; req_access_txt = "12"},/obj/structure/barricade/wooden{name = "wooden barricade (CLOSED)"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvt" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvu" = (/obj/structure/girder,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cvv" = (/obj/structure/table/wood,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/aft) +"cvw" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvx" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/wood,/area/maintenance/aft) +"cvy" = (/obj/structure/table/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) +"cvz" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvA" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvB" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvC" = (/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) +"cvD" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/aft) +"cvE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/wood,/area/maintenance/aft) +"cvF" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvG" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvH" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{tag = "icon-connector_map (WEST)"; icon_state = "connector_map"; dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvI" = (/obj/structure/grille,/obj/structure/window/fulltile,/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cvJ" = (/obj/structure/door_assembly/door_assembly_mai,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvK" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft) +"cvL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/space) +"cvM" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) +"cvN" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvQ" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvR" = (/obj/effect/spawner/lootdrop/maintenance,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/aft) +"cvU" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/toy/minimeteor,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvV" = (/obj/structure/disposalpipe/segment,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvW" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/c_tube,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvY" = (/obj/structure/mopbucket,/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft) +"cwa" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) +"cwb" = (/obj/structure/disposalpipe/segment,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwc" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwe" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cwf" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwh" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/latexballon,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwi" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwj" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) +"cwk" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/cigbutt/roach,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwl" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/general/hidden{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/external{name = "Solar Maintenance"; req_access = null; req_access_txt = "10; 13"},/turf/simulated/floor/plating,/area/space) +"cwn" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwo" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwp" = (/obj/machinery/light/small{dir = 4},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) +"cwq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwr" = (/obj/effect/decal/cleanable/robot_debris/old,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cws" = (/obj/machinery/light/small,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwt" = (/obj/machinery/light/small,/obj/structure/table,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/clipboard,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwu" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/decal/cleanable/ash,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwv" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) +"cww" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/maintenance/asmaint) +"cwx" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) +"cwy" = (/obj/structure/table,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwz" = (/obj/structure/table_frame,/obj/item/weapon/wirerod,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/asmaint2) +"cwA" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cwB" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwC" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/obj/structure/sign/securearea{name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; step_x = 28; step_y = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/asmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6664,21 +6670,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafalnaloalnaafaafaafaafabfabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaelaekaekaekaejaaaaafaizajyajzajAajBajCajDajEajFajGajHajIajJajMajLajIajJajKajLajIajJajQajOajOajOajPahCajNajRajSajTajUajVajWajVajVajVajXajYaiPaiuaivaiwaidaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaafaafaafaafadzaafaafaafaafaafabfabfabfaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaalnalPalnaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNakJalqalpafNaiyaiyakdakeakfakgakhaiAafRakiafRafRakjakkaklakmaknakoaklakmaknakpakqakmakraksakmaktakuakmakvakwakxaiAakyakzaiPakAaiPakBakCaiPaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaakDaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalnalnammalnalnaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaoDaoDaoDaoDaoDaaaakcalralRalQamnakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaaljaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafamDamEamFamGamDamHamHamHamHamHamHamHamHamHaaaaaaaaaaaaaoDaqzanSaqAaoDaaaafNakGakIakHafNaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanganhaniamDatRatRamHasFanSatQamHauPamHaaaaaaaaaaafamHbuEanSbLIamHaaaafNajxajxakFafNaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanPanQanRamDbNobRdaqsanSanSbXQamHamHamHaoDamHaoDaoDamHcbyccAcbyamHaaaakcakbajxakaafNaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaamDamDaoEaoFamDaryanSamHanSanSanScdwanSanSanSanSanSanSanSanSanSceeaoDaaaafNajZajxajxafOamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamwamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamHapDapEcfeapxbRdamHamHaoDaoDamHamHamHamHaoDamHaoDaoDamHatKanScfjamHaaaafNaeZaeZaeZafNaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaamHamHamHamHanManNanOamHaaaaaaamHanSapEaryanSanjamHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaamHcguanSapBamHaaaaeYaeXaeXaeXaeWaaaaafaizaiyanVaixanWanXanXanYanZanYanXanXaoaaobaobaobaocaobaobaodaoeaofaoganaaohanaanaanaanaaoianaanaanaanaanaaojaokaolaomaonaonaooaopaoqaoraosacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafancaotaouaovancaowaowaowaowaowalmalmalmallaoxamlanLallallamlallallallallaoyallallaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaEoaGaaEpaaaaGbaHoaHnaafaaaaagaagaagaaaaaaaafamHaozaoAaoBanSaoCanSamHaoDaoDamHasHapEaryasHamHamHamHaoDaoDaoDamHamHaaaapFaaaaaaaaaaoDaoDcgxaoDaoDaaaaaaaaaaaaaaaaaaaaaaafaixaoGakLaixaoHanXaoIaoJaoJaoJaoKanXaoLaoMaoNaoOaoPaoQaobamtamwaoRaoSaoTagTagTagTagTagTaoUaoVagTagTagTagTagTaoWaoXaoYaoZapaapbapcacAapdapeacAaafapfapgapgaphapgapgapiaafaafaaaaaaaaaaafalmapjalmaaaaowancancapkaplancapmamlamlamlallapnamlapoallamlamlamlappallamlallapqaprallamlapsallaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaIMaINaIMaaaaJXaJYaJXaafaafaoDapuaoDaaaaaaaafamHapvapwapxapyapzapAamHapBanSapCanSapEaryanSanSanSanSanSanSanSanSamHabtabtaaaaaaaaaaaaaoDanSaoDaaaaaaaaaaaaaaaaaaaaaaaaaafaixaoGapGaixapHanXapIapKapJapLapManXapNaobapOapPapQapRapSamtamwamyaoSahxapTapTapTapTapTapUapVapTapTapTapTapTapTapTapTapWapXapYapZapZapZapZapZaqaaqbaqcaqcaqcaqcaqcaqbapWaafaaaaaaaaaaafaqdamlalmaaaaowaqeaqfaqgaqhamlamlamlallamlallaqiamlamlallamlaqjaqkaqlaoyamlallaqmaqnallamlaqoallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqpaIMaOuaIMaqpaJXaYFaJXaqpaafaqranSaoDaaaaaaamHamHamHamHamHaqsaqtaquaquaqvaqwaqxaqwaqycgCarAaqBamHanSamHamHamHanSamHcjjabtaaaaaaaaaaaaaoDanSaoDaaaaaaaaaaaaaaaaqCaqCaqCaqCaqCaqCaqCaqCaqDanXaqEapKaqFaqGaqHanXapNaqIaqJaqKaqLaqMapSamtamwaqNaoSahxapTaqPaqOaqQaqRaqSaqTapTaqUaqVaqWapTaqXaqYaqZapWaraarbarcardarearfargarhaqbaqcaqcaqcaqcaqcaqbapWaafaafaafaafalmalmapjalmalmaowariamlarjamlanKamlallallarkallallarlallallaqlarmarnamlallamlaroaroaroaroaroaroaroaroaroabtabtabtabtaaIabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpbEPbaWaZZarpbJUbHJbEQarpamHaoDapuaoDaoDaoDamHaruarvarvarvarvarvarvarwarxamHamHamHamHamHanSamHamHanSarzamHarAanSamHamHamHaaaaaaaaaaaaaoDanSaoDaaaaaaaaaaafaafaqCarBarCaqCarDarEarFaqCaqDanXarGarIarHarHarJarKarLarMarNarNarOarNapSamtamwarPaoSahxapTarRarQarSarTarUarVapTarWarXarYapTarXarZasaapWasbascasdaseaseaseasfasgaqbaqcaqcaqcaqcaqcaqbapWapWapWaaaaaaalmamlamlamlapmaowashaqlarjamlasiasjaskaoyamlamlamlamlaslamlamlarmasmamlasnamlaroasoaspasqaroasrassastaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarparpasuarparparpasuarparpasvanSanSaswaswarzasxasyaszasAasAasAasAasAasAasBasCasDaaIasEamHanSasGasHarAasxamHasIanSanSanSaoDaaaaaaaaaaafaoDanSaoDaaaaaaaaaaqCaqCaqCasJasJaqCasJasJasJaqCasKanXasLasMasNasOasPasQasRasSaobasTasUasVaobasWamwamyaoSahxapTapTapTapTapTasXasYapTasZataatbapTapTatcatbapWatdateamPatgatgathatiatjatkaqcaqcaqcaqcaqcatlatmatnatoaaaaaaalmamlamlatpamlaowatqamlatratsatsatsatsattatsatuamlamlamlamlamlamlamlamlallasjaroatvatwatwaroatxatyatzaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpatAatBatCarpatDatBatCarpapAatEatFatGatGatGatHatIatJatKatLatMatNatOamHasyatJaaIatPasDaoDanSarzamHamHamHamHamHamHamHanSaoDaafaafaaaaafaoDanSaoDaagaagaagatSatTatSasJasJaqCaqCatUaqCaqCasKanXanXanXatVanXanXanXatWatXaobaobaobaobaobatYamwatZaoSahxapTaqPaqOauaaqRaubaucaudaueaufaugauhauiaujaukaulaumateaunauoauoaupasfauqatoaqcaqcaqcaqcaqcatoaurausatoaafaafallamlamlallallaowaowaowaowaowaowaowaowaowallautauuallallallallallallallauvauwauxauyauzauAauBauCatvauDaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaqparpasuauEaqparpauFauEaqpamHauGamHamHamHamHamHasyatJanSauHauIanSanSamHasyatJauJaafauJamHanScjWamHauKauLamHasIapAaszauMasAauNauOauOauOckCauMctlauOauOauOauNauQauNauNauRauNauSauRauTauUauVauWauWauWauWauWauWauWauXauYauWauWauWauWauZavaavbavbavcavdapTarRarSarSavfarUavgavhatfavjaxZavlavmavnavoavpavqavraunauoauoaupasfaveatoaqcaqcaqcaqcaqcatoavtausapWallallallavuamlamlavvallavwanLavxavyanKallatqanKallavzamlallavAamlallavBavCavDavEatsatsavFavGavHavIavJavKavLaroabtabtaaIaaIabtabtabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavNavNavNavOavNavNavNavPavQavRavPavPavPavSamHavTatJaDravUavVanSavWamHasyavXasAasAasAasAasAasAasCanSavVavYanSanSavZawaawbawcawdawdawdaweawdawfawdawdawgawhawiawjawjawjawjawjawjawkawlawmawnawnawnawnawnawnawnawoawnawpawpawpawpawpawqawrawsawtawuapTapTapTapTapTawvawwawxawyawzawAawBaviawDawEawFawGawHawIawJawJavsawLawMawNaqcaqcaqcaqcaqcawOawPawQapWamlamlamlamlamlamlamlamlamlavDatsatsatsatsatsatsatsawRamlamlamlamlasnamlamlarjawSawTawUawVawWawXatwatwatwawYaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMawZaxaawZaxbaxaaxaaxcawZaxaaxdaxeaxfaxfaxgamHavTatJaxhanSanSaxiaxjamHaxkarvarvarvarvarvarvaxlatJaxmanSamHasvasvaxnapNaqCaxoaxpaxqaxqaxraxqaxsaxqaxqaxtaxoaxuaxvaxvaxvaxvaxvaxvaxvavZaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLamwaxMacAaeUapTaqPaqOaxNaqRaxOaxPaxQaxQaxQaxRaxSaxTaxUaxVaulaxWaxXaxYaHFayaaybatiaycaydaqcaqcaqcaqcaqcaydapWapWapWamlallallanKallallaoyallallarjallallayeallallaoyallarjavuallallaoyallamlavuarjawSayfaroaygavGayhayiayjavGaykaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafamDamEamFamGamDamHamHamHamHamHamHamHamHamHaaaaaaaaaaaaaoDaqzasFaqAaoDaaaafNakGakIakHafNaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanganhaniamDatRatRamHatQanSauPamHbuEamHaaaaaaaaaaafamHbLIanSbNoamHaaaafNajxajxakFafNaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanPanQanRamDbRdbXQaqscbyanSccAamHamHamHaoDamHaoDaoDamHcdwceecdwamHaaaakcakbajxakaafNaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaamDamDaoEaoFamDaryanSamHanSanSanSaqsanSanScfeanSasFanSanSanSanScfjaoDaaaafNajZajxajxafOamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamwamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamHapDapEcguapxbXQamHamHaoDaoDamHamHamHamHaoDamHaoDaoDamHatKanScgxamHaaaafNaeZaeZaeZafNaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaamHamHamHamHanManNanOamHaaaaaaamHanSapEaryanSanjamHaaaaaaaafaaaaaaaafaafaaIaaIcgCcgCamHcjjanSapBamHaaaaeYaeXaeXaeXaeWaaaaafaizaiyanVaixanWanXanXanYanZanYanXanXaoaaobaobaobaocaobaobaodaoeaofaoganaaohanaanaanaanaaoianaanaanaanaanaaojaokaolaomaonaonaooaopaoqaoraosacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafancaotaouaovancaowaowaowaowaowalmalmalmallaoxamlanLallallamlallallallallaoyallallaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaEoaGaaEpaaaaGbaHoaHnaafaaaaagaagaagaaaaaaaafamHaozaoAaoBanSaoCanSamHaoDaoDamHasHapEaryasHamHamHamHaoDaoDaoDamHamHaaIapFaafaafaaIamHamHaqsamHamHaaaaaaaaaaaaaaaaaaaaaaafaixaoGakLaixaoHanXaoIaoJaoJaoJaoKanXaoLaoMaoNaoOaoPaoQaobamtamwaoRaoSaoTagTagTagTagTagTaoUaoVagTagTagTagTagTaoWaoXaoYaoZapaapbapcacAapdapeacAaafapfapgapgaphapgapgapiaafaafaaaaaaaaaaafalmapjalmaaaaowancancapkaplancapmamlamlamlallapnamlapoallamlamlamlappallamlallapqaprallamlapsallaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaIMaINaIMaaaaJXaJYaJXaafaafaoDapuaoDaaaaaaaafamHapvapwapxapyapzapAamHapBanSapCanSapEaryanSanSanSanSanSanSanSanSamHamHamHaafaaIaafaaIaoDanSaoDaaaaaaaaaaaaaaaaaaaaaaaaaafaixaoGapGaixapHanXapIapKapJapLapManXapNaobapOapPapQapRapSamtamwamyaoSahxapTapTapTapTapTapUapVapTapTapTapTapTapTapTapTapWapXapYapZapZapZapZapZaqaaqbaqcaqcaqcaqcaqcaqbapWaafaaaaaaaaaaafaqdamlalmaaaaowaqeaqfaqgaqhamlamlamlallamlallaqiamlamlallamlaqjaqkaqlaoyamlallaqmaqnallamlaqoallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqpaIMaOuaIMaqpaJXaYFaJXaqpaafaqranSaoDaaaaaaamHamHamHamHamHaqsaqtaquaquaqvaqwaqxaqwaqycjWarAaqBamHanSamHamHamHanSamHckCamHaaIaafaaaaafaoDanSaoDaaaaaaaaaaaaaaaaqCaqCaqCaqCaqCaqCaqCaqCaqDanXaqEapKaqFaqGaqHanXapNaqIaqJaqKaqLaqMapSamtamwaqNaoSahxapTaqPaqOaqQaqRaqSaqTapTaqUaqVaqWapTaqXaqYaqZapWaraarbarcardarearfargarhaqbaqcaqcaqcaqcaqcaqbapWaafaafaafaafalmalmapjalmalmaowariamlarjamlanKamlallallarkallallarlallallaqlarmarnamlallamlaroaroaroaroaroaroaroaroaroabtabtabtabtaaIabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpbEPbaWaZZarpbJUbHJbEQarpamHaoDapuaoDaoDaoDamHaruarvarvarvarvarvarvarwarxamHamHamHamHamHanSamHamHanSarzamHarAanSamHamHamHamHaaaaaaaaaaoDanSaoDaaaaaaaaaaafaafaqCarBarCaqCarDarEarFaqCaqDanXarGarIarHarHarJarKarLarMarNarNarOarNapSamtamwarPaoSahxapTarRarQarSarTarUarVapTarWarXarYapTarXarZasaapWasbascasdaseaseaseasfasgaqbaqcaqcaqcaqcaqcaqbapWapWapWaaaaaaalmamlamlamlapmaowashaqlarjamlasiasjaskaoyamlamlamlamlaslamlamlarmasmamlasnamlaroasoaspasqaroasrassastaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarparpasuarparparpasuarparpasvanSanSaswaswarzasxasyaszasAasAasAasAasAasAasBasCasDaaIasEamHanSasGasHarAasxamHasIanSanSanSctlauOaaaaaaaafaoDanSaoDaaaaaaaaaaqCaqCaqCasJasJaqCasJasJasJaqCasKanXasLasMasNasOasPasQasRasSaobasTasUasVaobasWamwamyaoSahxapTapTapTapTapTasXasYapTasZataatbapTapTatcatbapWatdateamPatgatgathatiatjatkaqcaqcaqcaqcaqcatlatmatnatoaaaaaaalmamlamlatpamlaowatqamlatratsatsatsatsattatsatuamlamlamlamlamlamlamlamlallasjaroatvatwatwaroatxatyatzaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpatAatBatCarpatDatBatCarpapAatEatFatGatGatGatHatIatJatKatLatMatNatOamHasyatJaaIatPasDaoDanSarzamHamHamHamHamHamHamHcuRctlauOaafaaaaafaoDanSaoDaagaagaagatSatTatSasJasJaqCaqCatUaqCaqCasKanXanXanXatVanXanXanXatWatXaobaobaobaobaobatYamwatZaoSahxapTaqPaqOauaaqRaubaucaudaueaufaugauhauiaujaukaulaumateaunauoauoaupasfauqatoaqcaqcaqcaqcaqcatoaurausatoaafaafallamlamlallallaowaowaowaowaowaowaowaowaowallautauuallallallallallallallauvauwauxauyauzauAauBauCatvauDaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaqparpasuauEaqparpauFauEaqpamHauGamHamHamHamHamHasyatJanSauHauIanSanSamHasyatJauJaafauJamHanScvjamHauKauLamHasIapAaszasAasAauNauOauOauOasAauMaytauOauOauOauNauQauNauNauRauNauSauRauTauUauVauWauWauWauWauWauWauWauXauYauWauWauWauWauZavaavbavbavcavdapTarRarSarSavfarUavgavhatfavjaxZavlavmavnavoavpavqavraunauoauoaupasfaveatoaqcaqcaqcaqcaqcatoavtausapWaaaaaaallavuamlamlavvallavwanLavxavyanKallatqanKallavzamlallavAamlallavBavCavDavEatsatsavFavGavHavIavJavKavLaroabtabtaaIaaIabtabtabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavNavNavNavOavNavNavNavPavQavRavPavPavPavSamHavTatJaDravUavVanSavWamHasyavXasAasAasAasAauMasAasCanSavVavYanSanSavZawaawbawcawdawdawdaweawdawfawdawdawgawhawiawjawjawjawjawjawjawkawlawmawnawnawnawnawnawnawnawoawnawpawpawpawpawpawqawrawsawtawuapTapTapTapTapTawvawwawxawyawzawAawBaviawDawEawFawGawHawIawJawJavsawLawMawNaqcaqcaqcaqcaqcawOawPawQapWaaaaaaallamlamlamlamlamlamlavDatsatsatsatsatsatsatsawRamlamlamlamlasnamlamlarjawSawTawUawVawWawXatwatwatwawYaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMawZaxaawZaxbaxaaxaaxcawZaxaaxdaxeaxfaxfaxgamHavTatJaxhanSanSaxiaxjamHaxkarvarvarvarvarvarvaxlatJaxmanSamHasvasvaxnapNaqCaxoaxpaxqaxqaxraxqaxsaxqaxqaxtaxoaxuaxvaxvaxvaxvaxvaxvaxvavZaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLamwaxMacAaeUapTaqPaqOaxNaqRaxOaxPaxQaxQaxQaxRaxSaxTaxUaxVaulaxWaxXaxYaHFayaaybatiaycaydaqcaqcaqcaqcaqcaydapWapWapWallallallanKallallaoyallallarjallallayeallallaoyallarjavuallallaoyallamlavuarjawSayfaroaygavGayhayiayjavGaykaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpavMaylavMaBGaxaaxaaMBavMaylavMayqayraxbaysamHavTavXaytasAasAasCayuayuallasnallayuayuayuayuayvaywauQauNauNauNauNayxapNarBaxoaaaaafaaaayyaaaayzaaaaafaaaaxoaxuaxvayAayBayCayDayEaxvavZayFayGayHayIayJayKayLayMayMayNayOayOayOayPaxKayQamwayRacAaeUapTarRarSarSaySarUayTayUayVayWayXayYayZayZazaayZapWazbazcazdazeazfazgapWaydaqcaqcaqcaqcaqcaydallaqoamlawTazhallallallaqoamlallaqoarjallaziamlallazjamlallazkazlallazmamlallaoyaoyarjaznazoaroazpavGazqazrazqavGazsaroaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaztaqpazuatBavMaymaynawCaypavMatBazuavMaqpazvazwamHazxazyazzazAatGazBayuazCazDazEazFazGazHazCayuazIazJazKawdawdawdawdawdazLazMaxoaafazNazNazOazNazPazNazNaafaxoaxuaxvazQazRazSazTazQaxvazUazVazWazXazYazZaAaaAbaAcaAdaAeaAfayOayOayOaAgayQamwaAhacAaeUapTapTapTapTapTaAiaAjaAkayZayZayZayZayZaAlaAmaAnayZapWapWapWapWaAoaApapWaydaqcaqcaqcaqcaqcaydallallamlaAqazhallaArallamlamlallamlarjallamlamlallamlamlallarjasjallamlamlallaAsamlarjawSaAtaroaroaroaroaroaroaroaroaroabtabtabtabtabtaafaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaylavMavMavMavMavMavMaylavMaaaaqpaAuaysaAvaAvaAwaAxaAvaAvaAyayuazCazEaAzaAAazEazEazCayuaqCaABaACaADaADaADaADaADaADaADaAEaaaazNaAFaAGaAIaAHaAJazNaaaaxoaxuaxvazQaAKaALaAMazQaxvawaazLaxxaANaAOaAPaAQaARaAbaASaATayOayOaAUayOaAgayQamwayRacAaeUapTaqPaqOaAVaqRaxOaAWayZaAXaAmaAYaAYayZaAlaAZaAnayZaBaaBbaBcaBdaBeaApaafaBfaBgaBgaBgaBgaBgaBhaaaallamlaBiaBjallallallallallallaBkaBlallallallallallallaBmaBnaBoaBpaBpaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBpaBAaBBaBCaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6726,50 +6732,50 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNcuCctMcuCafNbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhaGfbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbFAbtXbFCbCCbCCbCCbCCbGNbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbDpbGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekajxctyajxaekbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbDqbEHbDrbFDbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbAQbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybGabHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajxajxajxctLbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbMNbMNbMNbMNbMNbMNbOnbOCbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdclFbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbGLbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrcuQbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxcuRbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrcuQbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxcvkbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZctzctAafNbERbERbERbwlbwlbERbERbERbwlbwlbwlbWBbBcaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebsbbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaeYctjctkctjaeWaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBaVQbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbpobLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWcuEbLYcuFbMabMbbMcbDnbMdbsbbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYbJYbJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebsbbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbBcbJYbBcbJYbBcbBcbBcbBcbBcbBcbJYbJYbJYbBcbBcbBcbGnbGncvjbGnbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebsbbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBccvkcvlcvlcvlcvmbVEcvnbGnbGnaoybOsbOubOtbGnbGnbGnbGnbGnbJYbJYbJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbpCbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbsbbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvpcvocvrcvqbBcbGnbBcbGnaoybPxbGnbGnbGnbPybBcbJYbJYbBcaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbGTbGUbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagbJYcvscvlcvtcvtcvtbBccvubBccacbBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbxkbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbUobCWbRhbRibKKbRjbKKbRkbRlbCWbUobCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbOpbSsbGVbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvlcvvcvxcvwcvzcvycvBcvAbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbGVbjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbBcbJYbBcbJYbBcbBcbBcbBcbBcbBcbJYbJYbJYbBcbBcbBcbGnbGncvmcvlbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebsbbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBccvncvpcvocvpcvqcvscvrcvtbGncvubOsbOubOtbGnbGncvlbGnbGnbJYbJYbJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbpCbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbsbbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvwcvvcvycvxbBcbGnbBcbGnaoybPxbGnbGnbGnbPybBcbJYbJYbBcaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbGTbGUbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagbJYcvzcvpcvAcvAcvAbBccvBbBccacbBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbxkbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbUobCWbRhbRibKKbRjbKKbRkbRlbCWbUobCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbOpbSsbGVbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvpcvCcvEcvDcvGcvFcvIcvHbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbGVbjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafbRzaaabBcbBcbBcbBcbBcbBcbBcbBcbBcbBcbGnbGnbGnbGnbGnbGnbGnbSFbSGbSHbSIbSJbSKbSKbSKbSKbSLbSMbSMbSMbSNcqubSObDybDybSPbBccqnbMqbOAbSQbSRbSSbSTbRQbRQbSUbSVbRQbRQbSWbSXbSYbMFbSZbTabTbbTcbMFbTdbTebTfbOUaafbOVbTgbThbTibMKbMLbNPbTjbTkbTkbTkbTlbLFbTmbQZbTnbTobTpbTqbTrbTsbTsbTtbLFbKvbBMbItbItbItbItbTubTvbRjbTwbTubItbItbItbItbItbTxbTybTzbTAbTBbTCbTCbTCbTCbTDbOmbSqbSqbTEbPvbTFbSsbGVbjobjobjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabStbSubSubSubSubSvbSwbSwbSxbSybSzbSAbSBbSCbSDbSEbBcbTMbJYbJYbJYbJYbJYbJYbJYbJYbDCbTNbTObTObTObTObTObTObTObTObTPbTPcqxbTPbTPbTQbTRbBccqnbMqbOAbSQbTSbTTbTUbTVbPSbTWbTXbPSbPSbTYbTZbUabUbbUcbUdbUebUfbMFbTdbUgbUhbQabQbbNLbUibRYbRYbMKbMLbNPbUjbyebyebyebNYbLFbUkbMUbMUbUlbUmbUnbVibUpbVibUnbLFbKvbBMbQjbQkbQkbUqbQmbKKbQnbQobUrbUsbCWbCWbCWbItbUtbUubUvbUwbRnbRpbUxbUybUzbUAbOpbSqbSqbSqbPvbTFbSsbGVbsebsebjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabJYbJYbJYbGnbTHbTIbTJbTKbTLbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjcvCbzibzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWcqUbCWbVjbRibKKbRjbKKbRkbVkbCWcqUbCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbHzbjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUDbGnbUDbGnbUEbTIbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbVFbVGbVHbVIbVJbUGbVKbVLcqEbVNbVObTPbTRbBccqnbMqbOAbVPbVQbKmbVRbVSbKmbVTbVUbVVbKmbVWbQRbVXbLnbVYbUfbMFbUdbVZbWabRVbWbbNKbLDbNLbWcbWdbWebMKbMLbyebUjbyebABbUZbNYbLFbWfbWgbWhbWibUmbWgbWjbUpbWjbNVbNXbKvbBMbCWbCWbCWbWkbWlbQobSgbKKbShbWmbQkbQkbSjbBMbPvbWnbWobWobPvbPvbWpbWqbWrbWsbWtbWubTCbWvbSqbSqbSsbGVbjobWwbjobWxbjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabJYbJYbJYbGnbTHbTIbTJbTKbTLbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjcvJbzibzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWcqUbCWbVjbRibKKbRjbKKbRkbVkbCWcqUbCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbHzbjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUDbGnbUDbGnbUEcvKbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbVFbVGbVHbVIbVJbUGbVKbVLcqEbVNbVObTPbTRbBccqnbMqbOAbVPbVQbKmbVRbVSbKmbVTbVUbVVbKmbVWbQRbVXbLnbVYbUfbMFbUdbVZbWabRVbWbbNKbLDbNLbWcbWdbWebMKbMLbyebUjbyebABbUZbNYbLFbWfbWgbWhbWibUmbWgbWjbUpbWjbNVbNXbKvbBMbCWbCWbCWbWkbWlbQobSgbKKbShbWmbQkbQkbSjbBMbPvbWnbWobWobPvbPvbWpbWqbWrbWsbWtbWubTCbWvbSqbSqbSsbGVbjobWwbjobWxbjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbJYbJYbJYbVzbVAbVBbVCbVDbGnbVEbGnbJYaaaaaaaaaaaaaaaaaaaaabDCbTNbTObWCbWDbWEbVHbWFbWCbWCbVKbWGcqGcqFbWIbTPbTRbBccqnbMqbWJbWKbWKbWLbWMbWNbWObWPbWQbWRbKmbMFbQRbWSbWTbVYbWUbMFbUdbVZbTdbTebWVbOUaafbOVbWWbWXbWYbMKbMLbyebUjbyebGHbGHbNYbLFbLGbWZbXabLGbXbbLGbLGbLGbLGbLGbLFbKvbBMbItbItbItbItbTubXcbRjbXdbTubItbItbItbItbBMbRrbXebRrbRrbRrbPvbWpbWqbXfbXgbXhbXibUwbXjbPvbSqbSsbGVbjobsebsebsebXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbJYbWybWzbWzbWAbTLbWBbBccvDcvDaaabXlaaaaaaaaaaaaaaabEZbTNbTObWCbWCbXmbXnbXobWCbXpbXqbXrcqIcqHbXsbTPbTRbBccqJbXwbCrbWKbXxbXybXybXzbXAbXBbXCbXDbKmbXEbXFbVXbLnbVYbXGbMFbXHbVZbTdbXIbXJbQabQbbNLbXKbWdbWdbMKbMLbNPbUjcvEbyebXLbNYbXMbSabSabXNbLGbIHbIkbQBbyebXRbXSbKwbKvbBMbQjbQkbQkbXTbQmbKKbQnbQobXUbXVbCWbCWbCWbBMbXWbRrbRrbRrbRrbPvbXXbXXbXYbXZbOpbOpbUwbOpbPvbOpbSsbGVbjobYabYbbYcbXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabqabfabfabfabfabfaaaaaabBcbBcbBcbBcbBcbBcbVEbBcbBcbBcbBcaafaaaaaaaafaaIbYdaaaaaaaaabEZbTNbTObYebYfbYgbYhbYibYjbYkbYlbYmcqMcqKbYobTPbYpbYqbYrbYsbGybWKbYtbXybYubYvbYwbYxbYybYzbYAbNFbYBbLnbLnbLnbYCbMFbYDbYEbTdbTebMFbOUaafbMKbMKbMKbMKbMKbMLbNPcbxcvFbyebYFbYGbYHbTkbYIbYJbyebRybQCbTGbyebYNbKFbYObYPbBMbCWbUobCWbYQbRibKKbRjbKKbRkbYRbCWbUobCWbBMbYSbRrbYTbRrbRrbYUbYVbYWbYXbYYbOpbUwbUwbYZbPvbBRbZabUBbjobZcbZdbsebXkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaacfaaaaafaaaaafaaaabfaafaafbBcbGnbGnbGnbGnbGnbGnbGnbGnbWBbJYaaaaaaaaaaaIbZfbZgaaIaaIaafbEZbTNbTObZhbWCbUGbUGbUGbWCbZibZjbZkcqGcqNcqPbTPbBcbBcbZnbZobZpbWKbWKbZqbXybZrbZsbZtbZsbZubKmbMFbZvbZwbZxbZybONbZzbZAbZBbWabRVbZCbNKbLDbNLbZDbZEbZEbMKbMLbNPbyecvGbyebyebZFbZGbyebZHbZIbyebyebZJbyebyebZIbZKbZLbZMbBMbCWbCWbCWbZNbZObQobZPbKKbShbZQbQkbQkbSjbBMbRrbRrbZRbRrbRrbPvbXXbXXbZSbZTbOpbZUbZVbZWbPvboUbZabGVbjobjobjobsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbJYbWybWzbWzbWAbTLbWBbBccvLcvLaaabXlaaaaaaaaaaaaaaabEZbTNbTObWCbWCbXmbXnbXobWCbXpbXqbXrcqIcqHbXsbTPbTRbBccqJbXwbCrbWKbXxbXybXybXzbXAbXBbXCbXDbKmbXEbXFbVXbLnbVYbXGbMFbXHbVZbTdbXIbXJbQabQbbNLbXKbWdbWdbMKbMLbNPbUjcvMbyebXLbNYbXMbSabSabXNbLGbIHbIkbQBbyebXRbXSbKwbKvbBMbQjbQkbQkbXTbQmbKKbQnbQobXUbXVbCWbCWbCWbBMbXWbRrbRrbRrbRrbPvbXXbXXbXYbXZbOpbOpbUwbOpbPvbOpbSsbGVbjobYabYbbYcbXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabqabfabfabfabfabfaaaaaabBcbBcbBcbBcbBcbBcbVEbBcbBcbBcbBcaafaaaaaaaafaaIbYdaaaaaaaaabEZbTNbTObYebYfbYgbYhbYibYjbYkbYlbYmcqMcqKbYobTPbYpbYqbYrbYsbGybWKbYtbXybYubYvbYwbYxbYybYzbYAbNFbYBbLnbLnbLnbYCbMFbYDbYEbTdbTebMFbOUaafbMKbMKbMKbMKbMKbMLbNPcbxcvNbyebYFbYGbYHbTkbYIbYJbyebRybQCbTGbyebYNbKFbYObYPbBMbCWbUobCWbYQbRibKKbRjbKKbRkbYRbCWbUobCWbBMbYSbRrbYTbRrbRrbYUbYVbYWbYXbYYbOpbUwbUwbYZbPvbBRbZabUBbjobZcbZdbsebXkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaacfaaaaafaaaaafaaaabfaafaafbBcbGnbGnbGnbGnbGnbGnbGnbGnbWBbJYaaaaaaaaaaaIbZfbZgaaIaaIaafbEZbTNbTObZhbWCbUGbUGbUGbWCbZibZjbZkcqGcqNcqPbTPbBcbBcbZnbZobZpbWKbWKbZqbXybZrbZsbZtbZsbZubKmbMFbZvbZwbZxbZybONbZzbZAbZBbWabRVbZCbNKbLDbNLbZDbZEbZEbMKbMLbNPbyecvObyebyebZFbZGbyebZHbZIbyebyebZJbyebyebZIbZKbZLbZMbBMbCWbCWbCWbZNbZObQobZPbKKbShbZQbQkbQkbSjbBMbRrbRrbZRbRrbRrbPvbXXbXXbZSbZTbOpbZUbZVbZWbPvboUbZabGVbjobjobjobsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXbZYbZZaaabZXbZYbZZaaabZXbZYbZZaaaabfaaaaaabJYbZebGnbBcbBcbBcbRAbBcbBcbBcbBcaaaaaaaaacafaaIaaIaafaaaaaabEZbTNbTObWCcagcahbUGcaibWCbWCbVKcajcqGcqKcakbTPcalcamcancaocapcaqcarcascatcascatcaucatcavbKmcawcaxcaybPSbPSbPUbRPcazbRUbPVbTecaAbOUaafbOVcaBcaCcaDbMKbMLbyebzibUjcaEcaFbZFcaGbyebZHcaHcaIcaJcaKcaLcaIcaMbZHbgxcaNbBMbBMbBMbBMbBMbBMcaOcaPcaObBMbBMbBMbBMbBMbBMbPvbPvbPvbPvbPvbPvcaQcaQcaRcaSbPvbPvbPvbPvbPvbjobRxbGVbjocaTcaUbsebjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXcaVbZZaaabBccaVbZZaaabZXcaVbZZaafaafaaaaaabJYcaacabbBccacbGnbGncadbOucaebBcaaaaaaaaaaaaaafaaaaaaaaaaaabDCbTNbTObUGcaYcaZbUGcbacbbbUGbVKcbccqEcqQcqVcuPcqXcqWbOAaZDcbgcbhcbicbjcbkcblcbmcbnbXycbobKmcbpbMFbZvbRPbRQcbqcbrcbscbtbLAcbucbvbQabQbbNLcbwbZEbZEbMKbMLbyebzicvHcbzcbAcbBcbCbyecbDcbEcbFcbGcbHcbGcbIcbEcbJbgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjocbMbMfbkGcbNcbNbPvcbOcbOcaRbQtcbPcbQbsebsebsebBRbRxbHzbjocbRbsebsebjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXcaVbZZaafbZXcaVbZZaafbZXcaVbZZaaaaafaafaafbBcbJYbBcbBcbBccvIcvKcvJbGnbQDbBcaaaaaaaaaaaaaafaaaaaaaafaaabDCbTNbTObUGcbScbTcbUcbVcbWbUGcbXcbYcbZccaccbbTPccccqYcceccfccgcchcciccjcckcclccmccnccoccpccqccrbMFbZvcctbMFbMFbMFcctcctcctbTeaVSaVRaafbMKbMKbMKbMKbMKbMLbyebYFccuccvccwccxccybyebyecczcdncdnbKwccCccDbyebyebgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjobseccEbqvccFccGbPvccHccHccIbQtbPvbOpbjoccJccKbBRbRxbGVbsebsebsebUCbkHbVybkHaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaafaafbBcccRbBccaWcaXcvLbRAbBcbBcaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmbMFbOQccscctbMFbMFbMFbMHbSYcctbTecctbKmaafaafaafaafaafaafbMLcdjcdjcdjcdkcvdcdjcdjcdjcvMcvOcvNcdncvPcdncdnbyecvQbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbUBbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccvRbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhcctbKmbKmbKmaaaaaaaafaaacdVcdWcdXcdYcdZceacebceccdjcvSbziccBcvTbKwcvUccBbzibzicvVbntceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqbXOcesbjobjocetceoceuceocevbGVbjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXcaVbZZaaabBccaVbZZaaabZXcaVbZZaafaafaaaaaabJYcaacabbBccacbGnbGncadbOucaebBcaaaaaaaaaaaaaafaaaaaaaaaaaabDCbTNbTObUGcaYcaZbUGcbacbbbUGbVKcbccqEcqQcqVcuPcqXcqWbOAaZDcbgcbhcbicbjcbkcblcbmcbnbXycbobKmcbpbMFbZvbRPbRQcbqcbrcbscbtbLAcbucbvbQabQbbNLcbwbZEbZEbMKbMLbyebzicvPcbzcbAcbBcbCbyecbDcbEcbFcbGcbHcbGcbIcbEcbJbgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjocbMbMfbkGcbNcbNbPvcbOcbOcaRbQtcbPcbQbsebsebsebBRbRxbHzbjocbRbsebsebjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXcaVbZZaafbZXcaVbZZaafbZXcaVbZZaaaaafaafaafbBcbJYbBcbBcbBccvQcvScvRbGnbQDbBcaaaaaaaaaaaaaafaaaaaaaafaaabDCbTNbTObUGcbScbTcbUcbVcbWbUGcbXcbYcbZccaccbbTPccccqYcceccfccgcchcciccjcckcclccmccnccoccpccqccrbMFbZvcctbMFbMFbMFcctcctcctbTeaVSaVRaafbMKbMKbMKbMKbMKbMLbyebYFccuccvccwccxccybyebyecczcdncdnbKwccCccDbyebyebgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjobseccEbqvccFccGbPvccHccHccIbQtbPvbOpbjoccJccKbBRbRxbGVbsebsebsebUCbkHbVybkHaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaafaafbBcccRbBccaWcaXcvTbRAbBcbBcaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmbMFbOQccscctbMFbMFbMFbMHbSYcctbTecctbKmaafaafaafaafaafaafbMLcdjcdjcdjcdkcvdcdjcdjcdjcvUcvWcvVcdncvXcdncdnbyecvYbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbUBbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccvZbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhcctbKmbKmbKmaaaaaaaafaaacdVcdWcdXcdYcdZceacebceccdjcwabziccBcwbbKwcwcccBbzibzicwdbntceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqbXOcesbjobjocetceoceuceocevbGVbjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacexaaaaaaaaacexaaaaaaaaacexaaaaaaaafcducducduceycezceAceBceCbGnceDceEceFceEceEceEceEceEceEceEceEceEceEceGceHbRGceIceJceKceKceKceKceKceKceKceKceKceKceKceKceKceKccTccUceLceMceNceOcePceQceRceSceTceKcdbcdLcdMcdNcdOcdPcdQcdRbMFcdScdTcdUbLCcdibLCaaaaaaaafaaacdjceXceYceZcfacfbcfccfdcdjbzibzicdncdnbyecdnccBbDZbFMcfkcflcflcflcflcflcflcflcfmcfncflcflcflcflcflcflcfocfpcfqbmicfrcfscftcftcftbXPbYKbXkbYMbYLcbfbZbbZbccLccMbjocaUbsecfCbjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafalkcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKbKmcsKbLuceVbLuceUbLuceVbLuceWbLucsNbKmbKmbKmaafaafaafaaacdjcgqcgrcgscgtcvWcgvcgwcdjcvXbziccBccBcvYcdnccBccBcvZbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbsebXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacgLaaaaaaaaacgLaaaaaaaaacgLaaaaaaaafcducducducgMcgNcgOcdvbGnbGnbGnbGnbBcaaaaaaaafaaaaaaaafaaaaaaaafaaabBccgPbBccgQcgRceKcgScgTcgUcgVcgWcgXceRceRceRcgYcgZchachbcgXccUchcchdchecgictIccUchgchhchiceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaafaafaaaaaaaaaaafaafcdjchmchnchochpchqchrchschtchucwbcwaccBbKwccBcwccdnbyebyeaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabXkbsebXkaaabjochybLebjochzbZabjoaaaaaaaaaaaabjobsebZachAchBchBchCchDchBaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcbBcbJYchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaafcihciichncijcikcilcimcincdjcdmcdncdncdncdocdncdncdnbABabtaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabXkbsebXkaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcciwbHNchGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcvecjhcjicdjcedcwdcefcegcehccBccBccBbziabtaaaaaaaaaaaaaaaaafaaabXkbXkbXkbjobjobWwbjobjobjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnceFbGnbZechGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaafaafaafaafcnDaafcdjcdjcdjcjQcjRcjScvfcjUcjRcedcweccBcffcfgcfhcficcBcwfcvDaafaafaafaafaafaafaaabXkbsecwgbjobsebsebseclKbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcbBcbBcchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaafaafaaaaaaaaaaaaaaackBcjRbFkckDcuScjRbzicwhcgycgzcgAcgBbDZcwicgDabtaaaaaaaaaaaaaaaaafaaabXkckFcwjbsebsebsebsebsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZXckIbZZaaabZXckIbZZaaabZXckIbZZaaaabfaaaaaaaafaafaaaaaaaaaaaaaaabJYbGnbJYaaaaaachGccNckKckLckMckNchGchGchGceKckOckkckPceKceKceKceKceKckQceRckRciHceSceRceRceRckSckTckUceSceSciHceRckVceRceRckWckXceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaafaafaaaaaaaaaaaaaaaaaackYcjRcjScvgcjUcjRbyecwkbFMchvchwbFMchxbyebyeabtaaaaaaaaaaaaaaaaafaaabXkbsecwlbjoclKbsebsecwmbjoclabsebsebsebsebsebsebsebjoaafaaaaaaaaaaafaaackGclbckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafalkcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKbKmcsKbLuceVbLuceUbLuceVbLuceWbLucsNbKmbKmbKmaafaafaafaaacdjcgqcgrcgscgtcwecgvcgwcdjcwfbziccBccBcwgcdnccBccBcwhbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbXkbXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacgLaaaaaaaaacgLaaaaaaaaacgLaaaaaaaafcducducducgMcgNcgOcdvbGnbGnbGnbGnbBcaaaaaaaafaaaaaaaafaaaaaaaafaaabBccgPbBccgQcgRceKcgScgTcgUcgVcgWcgXceRceRceRcgYcgZchachbcgXccUchcchdchecgictIccUchgchhchiceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaafaafaaaaaaaaaaafaafcdjchmchnchochpchqchrchschtchucwjcwiccBbKwccBcwkcdnbyebyeaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjochybLebjochzbZabjoaaaaaaaaaaaabjobsebZachAchBchBchCchDchBaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcbBcbJYchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaafcihciichncijcikcilcimcincdjcdmcdncdncdncdocdncdncdnbABabtcvLcvLaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcciwbHNchGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcvecjhcjicdjcedcwlcefcegcehccBccBccBbzicwmcvmcwmaagaaaaaaaafaaabXkbXkbXkbjobjobjobjobjobjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnceFbGnbZechGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaafaafaafaafcnDaafcdjcdjcdjcjQcjRcjScvfcjUcjRcedcwnccBcffcfgcfhcficcBcwoabtcvLcvLaagaafaafaafaaabXkckFcwpbjobsecwqcwrclKbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcbBcbBcchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaafaafaaaaaaaaaaaaaaackBcjRbFkckDcuScjRbzicwscgycgzcgAcgBbDZcwtcgDabtaaaaaaaaaaaaaaaaafaaabXkcwucwvbWwbseccKbsebsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZXckIbZZaaabZXckIbZZaaabZXckIbZZaaaabfaaaaaaaafaafaaaaaaaaaaaaaaabJYbGnbJYaaaaaachGccNckKckLckMckNchGchGchGceKckOckkckPceKceKceKceKceKckQceRckRciHceSceRceRceRckSckTckUceSceSciHceRckVceRceRckWckXceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaafaafaaaaaaaaaaaaaaaaaackYcjRcjScvgcjUcjRbyecwwbFMchvchwbFMchxbyebyeabtaaaaaaaaaaaaaaaaafaaabXkckFcwxbjoclKbsebsecwybjoclabsebsebsebsebsebsebsebjoaafaaaaaaaaaaafaaackGclbckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaabfaaaaaaaaaaafaafaaaaaaaaaaaabJYbGnbJYaaaaaachGclccldcleclfclgclhclicljclhclkcllclmclncloclpclqclrclschLcqqcluclvclwclxclyclzclyclzclAclBclCchLchLclDchLclEcviceKceKceKceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaackYcjRclGclHclIclJaafbyecczciobNPbNPbyebyeaaaaafaaaaaaaaaaaaaaaaafaafbXkbXkbXkbjobjobjobsebjobjocipbjobjoclKclLbLebMdbjobjoaafaaaaaaaaaaafaaackGckHckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccuOcuLcuLcuNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabjocwjcwnbjocmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcuGcuJcuIcuHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaabjocwjbsebjocnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBccwobBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccuKcuLcuLcuMaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabjobjobjobsebjocnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBccgPbGncnEbBcaafchGchGchGchGchGaafaaaaaaaafceKcnFceRcnGcnHcnHcnIcgccgccnJceKcnKcnLcnLcnLceKcnMcnNcnOcnPcnQceKcnLcnLcnLcnKceKcnJcgccnRceSceRceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbjobjocwpbsebsebjoaaaaaaaaaaafaaaaaaaafaaaabfaaaaaaaafaaaaafaaaaaacnSaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagbjobXkbjocwqbsebsebsebjoaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcotcoubHMbBccgcccOccOccOccOccOccOccOccOcgcceKcowcoxcoycozcowceKceKceKcnJceKceKcogcogcogcogcoAcoBcoCcoBcoDcogcogcogcogceKceKcnJceKckkcoEcoFcoGcoHceRcoIcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagcwrbsecwrcwscwscwtbsebjoaaaaaaaaaaaaaaaaaaaafaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYbJYbJYbJYbBcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcoPcoQcoRaaaaaaaaacogcogcogcogcogcogcogcogcogaaaaaaaaacoScoTcoUcoVcoWclyclycoXcoYcoZcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagbjobXkbjocwvcwucwwbjobjoaafaaaaaaaaaaaaaaaaafaaaabfacfcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpdcpbceKcpecpfceKcgccgccpgcgcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabjobjobjobjobjoaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaaaaaaaaaafaaaaaaaaacosaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcphcpicpjaafaafaafcpkaaaaaaaaaaaacpkaaaaaacpkaafaafaafcplcpmcpnceKcpocdIcgcaafaaacppcpqaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpraaaaaaaafaaaaaaaaaaaaaaacpsaaaaaaaaaaafaaaaaacpccpccpbceKaagaagaagaafaaacptcpucpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpycpzaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpAcpBcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpCcpDceKaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacptcpEcpqcnDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafcpkaafaafcpGcpHcpIaafcpJaaaaafaaaaaacpccpFceKceKaaaaaaaagaafaafcnDaafaafcnDaafaafaafaafaafaafaafaafaafaafaafaafcnDaafcpKcpEcpzaafaafcqhcqhcqhcqhcqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaafaaaaaaaaacpLaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcpMceKcpNcpcaaaaaaaafaaaaaaaafcpOcpPcpQaafaaaaaaaafaaaaaacpccpRceKcpMaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcnDaaaaaacpScpEcpqaaacqhbPGbPCcqZcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacmxaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccuOcuLcuLcuNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabjocwvcwzbjocmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcuGcuJcuIcuHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaabjocwvcwqbjocnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBccwAbBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccuKcuLcuLcuMaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabXkcwBbXkbXkcnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBccgPbGncnEbBcaafchGchGchGchGchGaafaaaaaaaafceKcnFceRcnGcnHcnHcnIcgccgccnJceKcnKcnLcnLcnLceKcnMcnNcnOcnPcnQceKcnLcnLcnLcnKceKcnJcgccnRceSceRceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabXkbsebXkaaaaaaaaaaaaaafaaaaaaaafaaaabfaaaaaaaafaaaaafaaaaaacnSaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabXkcwCbXkaaaaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcotcoubHMbBccgcccOccOccOccOccOccOccOccOcgcceKcowcoxcoycozcowceKceKceKcnJceKceKcogcogcogcogcoAcoBcoCcoBcoDcogcogcogcogceKceKcnJceKckkcoEcoFcoGcoHceRcoIcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYbJYbJYbJYbBcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcoPcoQcoRaaaaaaaaacogcogcogcogcogcogcogcogcogaaaaaaaaacoScoTcoUcoVcoWclyclycoXcoYcoZcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaabfacfcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpdcpbceKcpecpfceKcgccgccpgcgcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaabfaaaaaaaaaaafaaaaaaaaacosaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcphcpicpjaafaafaafcpkaaaaaaaaaaaacpkaaaaaacpkaafaafaafcplcpmcpnceKcpocdIcgcaafaaacppcpqaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpraaaaaaaafaaaaaaaaaaaaaaacpsaaaaaaaaaaafaaaaaacpccpccpbceKaagaagaagaafaaacptcpucpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpwcpvcpwcpxcpycpzaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpAcpBcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpCcpDceKaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacptcpEcpqcnDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafcpkaafaafcpGcpHcpIaafcpJaaaaafaaaaaacpccpFceKceKaaaaaaaagaafaafcnDaafaafcnDaafaafaafaafaafaafaafaafaafaafaafaafcnDaafcpKcpEcpzaafaafcqhcqhcqhcqhcqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaaaaaaaaaafaaaaaaaaacpLaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcpMceKcpNcpcaaaaaaaafaaaaaaaafcpOcpPcpQaafaaaaaaaafaaaaaacpccpRceKcpMaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagcnDaaaaaacpScpEcpqaaacqhbPGbPCcqZcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcorcorcorcorcoraaacmxaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKceKcpFcpcaaaaaaaafaaacpTaafcpUcpVcpWaafaafcpkaafaaaaaacpccpFceKceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacpXcpYcpqcqhcrecracrjcqhaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaacoJcoKcoKcoKcoKcpZcqacpZcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpCcpDcpcaaaaaaaafaaaaaaaafaafaafaafaafaaaaaaaafaaaaaacpccpAcpBceKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcpXcqbcqhcrlcqvcrncqhaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafcpacpacpacpacpaaaacmxaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccqcaaaaaacqdaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacpccpccpbceKaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcqecqfcqhcrucqwcrvcqhcqecqeaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaaaaafaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From e0f1760052899b06bc9cd8617798c08c6ea97636 Mon Sep 17 00:00:00 2001 From: Dorsisdwarf Date: Tue, 21 Jul 2015 12:38:23 +0100 Subject: [PATCH 51/65] Fixes piping errors --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 235 +++++++++--------- 1 file changed, 118 insertions(+), 117 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 55cc3d32574..8816fc4f674 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -4601,9 +4601,9 @@ "bKy" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bKz" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/door_control{id = "medpriv1"; name = "Privacy Shutters"; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "bKA" = (/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "medpriv1"; name = "privacy door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/medical/medbay) -"bKB" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) +"bKB" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/toy/sword,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bKC" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) -"bKD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) +"bKD" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/noticeboard{dir = 8; pixel_x = 27; pixel_y = 0},/obj/item/trash/plate,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bKE" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/medbay) "bKF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bKG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -4660,8 +4660,8 @@ "bLF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/medical/virology) "bLG" = (/turf/simulated/wall/r_wall,/area/medical/virology) "bLH" = (/turf/simulated/wall,/area/medical/virology) -"bLI" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/toy/sword,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"bLJ" = (/obj/structure/sign/biohazard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/medical/virology) +"bLI" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bLJ" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bLK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j2s"; sortType = 13},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Xenobiology Maintenance"; req_access_txt = "55"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/toxins/xenobiology) "bLM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -4721,9 +4721,9 @@ "bMO" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/machinery/camera{c_tag = "Virology Break Room"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMP" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMQ" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bMR" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/medical/virology) -"bMS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bMT" = (/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Virology Airlock"; dir = 2; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/medical/virology) +"bMR" = (/obj/item/trash/sosjerky,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bMS" = (/obj/item/weapon/airalarm_electronics,/obj/item/weapon/circuitboard/seed_extractor,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bMT" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) "bMU" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMV" = (/mob/living/carbon/monkey,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bMW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -4744,7 +4744,7 @@ "bNl" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/mixing) "bNm" = (/obj/item/target,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/toxins/test_area) "bNn" = (/obj/machinery/light_construct{dir = 8},/turf/simulated/floor/plating,/area/construction) -"bNo" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/noticeboard{dir = 8; pixel_x = 27; pixel_y = 0},/obj/item/trash/plate,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bNo" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) "bNp" = (/obj/machinery/light_construct{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction) "bNq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/construction) "bNr" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) @@ -4941,7 +4941,7 @@ "bRa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/virology{name = "Break Room"; req_access_txt = "39"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRc" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) -"bRd" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bRd" = (/obj/effect/decal/cleanable/egg_smudge,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bRe" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/firealarm{pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) "bRg" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/camera{c_tag = "Virology Module"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/virology) @@ -5292,7 +5292,7 @@ "bXN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/medical/virology) "bXO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bXP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bXQ" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bXQ" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "bXR" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXS" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bXT" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) @@ -5390,9 +5390,9 @@ "bZH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bZI" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bZJ" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access_txt = "12;24"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bZK" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bZL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bZM" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (EAST)"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bZK" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bZL" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"bZM" = (/turf/simulated/floor/plasteel/airless,/area/space) "bZN" = (/obj/structure/grille,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/poddoor/preopen{id = "xenobio1"; name = "containment blast door"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bZO" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 5; icon_state = "warning"},/area/toxins/xenobiology) "bZP" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/xenobiology) @@ -5482,18 +5482,18 @@ "cbv" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cbw" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cbx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cby" = (/obj/item/trash/sosjerky,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cby" = (/obj/structure/table,/obj/item/weapon/stamp,/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cbz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbC" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cbF" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cbF" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2) "cbG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cbH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cbI" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cbJ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cbH" = (/obj/machinery/monkey_recycler,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cbI" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cbJ" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "cbK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cbL" = (/obj/structure/disposalpipe/segment,/obj/structure/lattice,/turf/space,/area/space) "cbM" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5536,7 +5536,7 @@ "ccx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccy" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccz" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/maintenance/asmaint) -"ccA" = (/obj/item/weapon/airalarm_electronics,/obj/item/weapon/circuitboard/seed_extractor,/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"ccA" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ccB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccC" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ccD" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/l3closet,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5584,7 +5584,7 @@ "cdt" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cdu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cdv" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cdw" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) +"cdw" = (/turf/indestructible{desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; name = "hyper-reinforced wall"},/area/toxins/test_area) "cdx" = (/obj/structure/closet/wardrobe/black,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/aft) "cdy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft) "cdz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) @@ -5618,7 +5618,7 @@ "ceb" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/trunk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cec" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{tag = "icon-cobweb2"; icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ced" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cee" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2) +"cee" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "cef" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5670,12 +5670,12 @@ "cfb" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cfc" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cfd" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cfe" = (/obj/effect/decal/cleanable/egg_smudge,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cfe" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay) "cff" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfg" = (/obj/structure/disposalpipe/junction{dir = 2; icon_state = "pipe-y"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfh" = (/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cfi" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cfj" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cfj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/medical/virology) "cfk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/asmaint) "cfl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cfm" = (/obj/structure/stool/bed/chair,/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5738,15 +5738,15 @@ "cgr" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgs" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgt" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cgu" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cgu" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virology) "cgv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cgw" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cgx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/monkey_recycler,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cgx" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/medical/virology) "cgy" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgB" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cgC" = (/turf/simulated/floor/plasteel/airless,/area/space) +"cgC" = (/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Virology Airlock"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/medical/virology) "cgD" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgE" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cgF" = (/obj/structure/rack,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5883,7 +5883,7 @@ "cjg" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cji" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cjj" = (/obj/structure/table,/obj/item/weapon/stamp,/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cjj" = (/obj/structure/barricade/wooden,/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/aft) "cjk" = (/obj/structure/rack,/obj/structure/disposalpipe/segment,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjl" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5922,7 +5922,7 @@ "cjT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 29},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "cjU" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/wall/r_wall,/area/maintenance/incinerator) "cjV" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) -"cjW" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/fpmaint2) +"cjW" = (/turf/simulated/floor/plating,/area/space) "cjX" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint2) "cjY" = (/obj/structure/closet/toolcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cjZ" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -5954,7 +5954,7 @@ "ckz" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/engine/engineering) "ckA" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "ckB" = (/obj/structure/lattice,/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Incinerator Output Pump"; on = 1},/turf/space,/area/space) -"ckC" = (/obj/machinery/monkey_recycler,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/obj/item/weapon/reagent_containers/food/snacks/monkeycube,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"ckC" = (/obj/machinery/vending/boozeomat,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft) "ckD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator) "ckE" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "ckF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6405,7 +6405,7 @@ "cti" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "ctj" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/labor) "ctk" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating,/area/shuttle/labor) -"ctl" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"ctl" = (/obj/effect/decal/cleanable/robot_debris/old,/turf/simulated/floor/wood,/area/maintenance/aft) "ctm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/aisat) "ctn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "cto" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) @@ -6489,7 +6489,7 @@ "cuO" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/pod_4) "cuP" = (/obj/machinery/door/airlock/engineering{name = "Telecommunications"; req_access_txt = "61"},/turf/simulated/floor/plasteel,/area/tcommsat/computer) "cuQ" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock) -"cuR" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) +"cuR" = (/turf/simulated/floor/wood,/area/maintenance/aft) "cuS" = (/obj/machinery/atmospherics/components/binary/pump{dir = 1; on = 1},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/doorButtons/access_button{idSelf = "incinerator_access_control"; idDoor = "incinerator_airlock_interior"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cuT" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel,/area/quartermaster/storage) "cuU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/storage) @@ -6507,53 +6507,53 @@ "cvg" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; heat_proof = 1; icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Turbine Exterior Airlock"; req_access_txt = "32"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/maintenance/incinerator) "cvh" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cvi" = (/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) -"cvj" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/fpmaint2) -"cvk" = (/turf/indestructible{desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; name = "hyper-reinforced wall"},/area/toxins/test_area) -"cvl" = (/obj/structure/barricade/wooden,/obj/structure/girder,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvm" = (/turf/simulated/floor/plating,/area/space) -"cvn" = (/obj/machinery/vending/boozeomat,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/maintenance/aft) -"cvo" = (/obj/effect/decal/cleanable/robot_debris/old,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvp" = (/turf/simulated/floor/wood,/area/maintenance/aft) -"cvq" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/aft) -"cvr" = (/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvs" = (/obj/machinery/door/airlock/maintenance{name = "Maint Bar Access"; req_access_txt = "12"},/obj/structure/barricade/wooden{name = "wooden barricade (CLOSED)"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvt" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvu" = (/obj/structure/girder,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"cvv" = (/obj/structure/table/wood,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/aft) -"cvw" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvx" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/wood,/area/maintenance/aft) -"cvy" = (/obj/structure/table/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) -"cvz" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvA" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/aft) -"cvB" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvC" = (/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) -"cvD" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/aft) -"cvE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/wood,/area/maintenance/aft) -"cvF" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvG" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvH" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{tag = "icon-connector_map (WEST)"; icon_state = "connector_map"; dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft) -"cvI" = (/obj/structure/grille,/obj/structure/window/fulltile,/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"cvJ" = (/obj/structure/door_assembly/door_assembly_mai,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvK" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft) -"cvL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/space) -"cvM" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) -"cvN" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvQ" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvR" = (/obj/effect/spawner/lootdrop/maintenance,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/aft) -"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/aft) -"cvU" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/toy/minimeteor,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvV" = (/obj/structure/disposalpipe/segment,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvW" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/c_tube,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvY" = (/obj/structure/mopbucket,/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cvZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft) -"cwa" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) -"cwb" = (/obj/structure/disposalpipe/segment,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwc" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cwd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvj" = (/turf/simulated/floor/wood{tag = "icon-wood-broken"; icon_state = "wood-broken"},/area/maintenance/aft) +"cvk" = (/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvl" = (/obj/machinery/door/airlock/maintenance{name = "Maint Bar Access"; req_access_txt = "12"},/obj/structure/barricade/wooden{name = "wooden barricade (CLOSED)"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvm" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvn" = (/obj/structure/girder,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cvo" = (/obj/structure/table/wood,/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor/wood{tag = "icon-wood-broken7"; icon_state = "wood-broken7"},/area/maintenance/aft) +"cvp" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvq" = (/obj/structure/table/wood,/obj/effect/spawner/lootdrop/maintenance{lootcount = 4; name = "4maintenance loot spawner"},/turf/simulated/floor/wood,/area/maintenance/aft) +"cvr" = (/obj/structure/table/wood,/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) +"cvs" = (/obj/machinery/space_heater,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvt" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/maintenance/aft) +"cvu" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvv" = (/turf/simulated/floor/wood{tag = "icon-wood-broken5"; icon_state = "wood-broken5"},/area/maintenance/aft) +"cvw" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/wood{tag = "icon-wood-broken6"; icon_state = "wood-broken6"},/area/maintenance/aft) +"cvx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 120; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/wood,/area/maintenance/aft) +"cvy" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvA" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{tag = "icon-connector_map (WEST)"; icon_state = "connector_map"; dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvB" = (/obj/structure/grille,/obj/structure/window/fulltile,/obj/machinery/atmospherics/pipe/simple/general/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"cvC" = (/obj/structure/door_assembly/door_assembly_mai,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvD" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/aft) +"cvE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/space) +"cvF" = (/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) +"cvG" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvI" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvK" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvM" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvN" = (/obj/effect/spawner/lootdrop/maintenance,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/aft) +"cvP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/asmaint) +"cvQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/aft) +"cvR" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/toy/minimeteor,/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvS" = (/obj/structure/disposalpipe/segment,/obj/structure/rack{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/reagent_containers/food/snacks/donkpocket,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvT" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/item/roller,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/c_tube,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvV" = (/obj/structure/mopbucket,/obj/item/weapon/caution,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/aft) +"cvX" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/asmaint) +"cvY" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cvZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwa" = (/obj/structure/disposalpipe/segment,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwb" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cwc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/barricade/wooden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cwe" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cwf" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cwg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -6576,9 +6576,10 @@ "cwx" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/asmaint2) "cwy" = (/obj/structure/table,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cwz" = (/obj/structure/table_frame,/obj/item/weapon/wirerod,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/asmaint2) -"cwA" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plating,/area/maintenance/aft) -"cwB" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"cwC" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/obj/structure/sign/securearea{name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; step_x = 28; step_y = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwA" = (/obj/machinery/atmospherics/components/unary/outlet_injector{dir = 1; name = "Scrubber Loop Ejector"; on = 1},/turf/simulated/floor/plating/airless,/area/space) +"cwB" = (/obj/machinery/door/airlock{name = "Observatory Access"},/turf/simulated/floor/plating,/area/maintenance/aft) +"cwC" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cwD" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "13"},/obj/structure/sign/securearea{name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; step_x = 28; step_y = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/asmaint2) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6671,18 +6672,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafaaaalnalPalnaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNakJalqalpafNaiyaiyakdakeakfakgakhaiAafRakiafRafRakjakkaklakmaknakoaklakmaknakpakqakmakraksakmaktakuakmakvakwakxaiAakyakzaiPakAaiPakBakCaiPaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaakDaaaaaaaafaaaaaaaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafalnalnammalnalnaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaeaoDaoDaoDaoDaoDaaaakcalralRalQamnakKakLakKakeakMakNakOaiAakPakQakPafRakRakSakTafRakUakSakTafRakUakSakTafRakVakWakXakYailafRakZalaalbaiAalcaldalealfalealgalhaliaiuaivaiwaidaafaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaaaaaaljaaaaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaallalmallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaafamDamEamFamGamDamHamHamHamHamHamHamHamHamHaaaaaaaaaaaaaoDaqzasFaqAaoDaaaafNakGakIakHafNaiyaiyaiyalsaltalualvaiAakPakQakPafRalwakSalxafRalyakSalzafRalAakSalBafRalCalDalEakYalFafRalGakSalHaiAalIalJalIalKalIalIalLalIaiuaivaiwacAacAaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaalMalNalMaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaallalOallaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanganhaniamDatRatRamHatQanSauPamHbuEamHaaaaaaaaaaafamHbLIanSbNoamHaaaafNajxajxakFafNaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanPanQanRamDbRdbXQaqscbyanSccAamHamHamHaoDamHaoDaoDamHcdwceecdwamHaaaakcakbajxakaafNaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaamDamDaoEaoFamDaryanSamHanSanSanSaqsanSanScfeanSasFanSanSanSanScfjaoDaaaafNajZajxajxafOamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamwamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamHapDapEcguapxbXQamHamHaoDaoDamHamHamHamHaoDamHaoDaoDamHatKanScgxamHaaaafNaeZaeZaeZafNaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaamHamHamHamHanManNanOamHaaaaaaamHanSapEaryanSanjamHaaaaaaaafaaaaaaaafaafaaIaaIcgCcgCamHcjjanSapBamHaaaaeYaeXaeXaeXaeWaaaaafaizaiyanVaixanWanXanXanYanZanYanXanXaoaaobaobaobaocaobaobaodaoeaofaoganaaohanaanaanaanaaoianaanaanaanaanaaojaokaolaomaonaonaooaopaoqaoraosacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafancaotaouaovancaowaowaowaowaowalmalmalmallaoxamlanLallallamlallallallallaoyallallaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanganhaniamDatRatRamHatQanSauPamHbuEamHaaaaaaaaaaafamHbKBanSbKDamHaaaafNajxajxakFafNaaaaaaalSaixaiyalTalUaiAakPalVakPaiAalWalXalXalYalXalXalXalYalXalXalXalYalZamaambamcamdaiAaiAaiAaiAaiAameamfameaiRameameamgaiRaiuamhamiamjacAacAacAaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaalMamkalMaaaaafaafaafaafaaaaafaaaaaaaaaaafaafaaaaaaaaaallamlallaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamDanPanQanRamDbLIbLJaqsbMRanSbMSamHamHamHaoDamHaoDaoDamHbMTbNobMTamHaaaakcakbajxakaafNaiyaiyaiyampamqamramsaizaiAaiAaiAaiAamtamtamtamuamtamtamtamvamtamtamtamuamtamtamtamwamwamxamyamyamyamzameamfameaiRameameamgaiRacAaivamAaeUamBamCamBaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafalMalMalNalMalMaafaaaaaaaafaaaaafaaaaaaaaaaaaaafaafaaaaaaallamlallaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaamDamDaoEaoFamDaryanSamHanSanSanSaqsanSanSbRdanSasFanSanSanSanSbXQaoDaaaafNajZajxajxafOamKakLamKakeakMakNakMamLamwamwamwamMamwamwamNamwamwamwamwamwamwamwamOamwamwamwamQamwamwamwamwamwamwamRaiRamSamTamUamVaiRamWaiRamXamYamZanaanaanbacAaagaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafancandaneanfancaafaaaaaaaafaaaaafaaaaafaaaaaaaaaaafallallallamlallallallallallallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHamHamHamHamHaafaafamHapDapEbZKapxbLJamHamHaoDaoDamHamHamHamHaoDamHaoDaoDamHatKanSbZLamHaaaafNaeZaeZaeZafNaiyaiyanlanmannanoanpaixanqanqanqanqanqanransanqanqanqanqanqanqanqantanuanuanuanvanwanuanxanyanzanAamzanBanCaiuaiuaiuaiuaiuaiuacAanDanEacAanFanGacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafancanHanIanJancaafaaaaaaaafaaaaafaaaaafallalmallalmallanKamlamlamlamlamlamlanLallaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaamHamHamHamHanManNanOamHaaaaaaamHanSapEaryanSanjamHaaaaaaaafaaaaaaaafaafaaIaaIbZMbZMamHcbyanSapBamHaaaaeYaeXaeXaeXaeWaaaaafaizaiyanVaixanWanXanXanYanZanYanXanXaoaaobaobaobaocaobaobaodaoeaofaoganaaohanaanaanaanaaoianaanaanaanaanaaojaokaolaomaonaonaooaopaoqaoraosacAaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaagaagaagaaaaafancaotaouaovancaowaowaowaowaowalmalmalmallaoxamlanLallallamlallallallallaoyallallaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaEoaGaaEpaaaaGbaHoaHnaafaaaaagaagaagaaaaaaaafamHaozaoAaoBanSaoCanSamHaoDaoDamHasHapEaryasHamHamHamHaoDaoDaoDamHamHaaIapFaafaafaaIamHamHaqsamHamHaaaaaaaaaaaaaaaaaaaaaaafaixaoGakLaixaoHanXaoIaoJaoJaoJaoKanXaoLaoMaoNaoOaoPaoQaobamtamwaoRaoSaoTagTagTagTagTagTaoUaoVagTagTagTagTagTaoWaoXaoYaoZapaapbapcacAapdapeacAaafapfapgapgaphapgapgapiaafaafaaaaaaaaaaafalmapjalmaaaaowancancapkaplancapmamlamlamlallapnamlapoallamlamlamlappallamlallapqaprallamlapsallaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaIMaINaIMaaaaJXaJYaJXaafaafaoDapuaoDaaaaaaaafamHapvapwapxapyapzapAamHapBanSapCanSapEaryanSanSanSanSanSanSanSanSamHamHamHaafaaIaafaaIaoDanSaoDaaaaaaaaaaaaaaaaaaaaaaaaaafaixaoGapGaixapHanXapIapKapJapLapManXapNaobapOapPapQapRapSamtamwamyaoSahxapTapTapTapTapTapUapVapTapTapTapTapTapTapTapTapWapXapYapZapZapZapZapZaqaaqbaqcaqcaqcaqcaqcaqbapWaafaaaaaaaaaaafaqdamlalmaaaaowaqeaqfaqgaqhamlamlamlallamlallaqiamlamlallamlaqjaqkaqlaoyamlallaqmaqnallamlaqoallaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqpaIMaOuaIMaqpaJXaYFaJXaqpaafaqranSaoDaaaaaaamHamHamHamHamHaqsaqtaquaquaqvaqwaqxaqwaqycjWarAaqBamHanSamHamHamHanSamHckCamHaaIaafaaaaafaoDanSaoDaaaaaaaaaaaaaaaaqCaqCaqCaqCaqCaqCaqCaqCaqDanXaqEapKaqFaqGaqHanXapNaqIaqJaqKaqLaqMapSamtamwaqNaoSahxapTaqPaqOaqQaqRaqSaqTapTaqUaqVaqWapTaqXaqYaqZapWaraarbarcardarearfargarhaqbaqcaqcaqcaqcaqcaqbapWaafaafaafaafalmalmapjalmalmaowariamlarjamlanKamlallallarkallallarlallallaqlarmarnamlallamlaroaroaroaroaroaroaroaroaroabtabtabtabtaaIabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqpaIMaOuaIMaqpaJXaYFaJXaqpaafaqranSaoDaaaaaaamHamHamHamHamHaqsaqtaquaquaqvaqwaqxaqwaqycbFarAaqBamHanSamHamHamHanSamHcbHamHaaIaafaaaaafaoDanSaoDaaaaaaaaaaaaaaaaqCaqCaqCaqCaqCaqCaqCaqCaqDanXaqEapKaqFaqGaqHanXapNaqIaqJaqKaqLaqMapSamtamwaqNaoSahxapTaqPaqOaqQaqRaqSaqTapTaqUaqVaqWapTaqXaqYaqZapWaraarbarcardarearfargarhaqbaqcaqcaqcaqcaqcaqbapWaafaafaafaafalmalmapjalmalmaowariamlarjamlanKamlallallarkallallarlallallaqlarmarnamlallamlaroaroaroaroaroaroaroaroaroabtabtabtabtaaIabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpbEPbaWaZZarpbJUbHJbEQarpamHaoDapuaoDaoDaoDamHaruarvarvarvarvarvarvarwarxamHamHamHamHamHanSamHamHanSarzamHarAanSamHamHamHamHaaaaaaaaaaoDanSaoDaaaaaaaaaaafaafaqCarBarCaqCarDarEarFaqCaqDanXarGarIarHarHarJarKarLarMarNarNarOarNapSamtamwarPaoSahxapTarRarQarSarTarUarVapTarWarXarYapTarXarZasaapWasbascasdaseaseaseasfasgaqbaqcaqcaqcaqcaqcaqbapWapWapWaaaaaaalmamlamlamlapmaowashaqlarjamlasiasjaskaoyamlamlamlamlaslamlamlarmasmamlasnamlaroasoaspasqaroasrassastaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarparpasuarparparpasuarparpasvanSanSaswaswarzasxasyaszasAasAasAasAasAasAasBasCasDaaIasEamHanSasGasHarAasxamHasIanSanSanSctlauOaaaaaaaafaoDanSaoDaaaaaaaaaaqCaqCaqCasJasJaqCasJasJasJaqCasKanXasLasMasNasOasPasQasRasSaobasTasUasVaobasWamwamyaoSahxapTapTapTapTapTasXasYapTasZataatbapTapTatcatbapWatdateamPatgatgathatiatjatkaqcaqcaqcaqcaqcatlatmatnatoaaaaaaalmamlamlatpamlaowatqamlatratsatsatsatsattatsatuamlamlamlamlamlamlamlamlallasjaroatvatwatwaroatxatyatzaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpatAatBatCarpatDatBatCarpapAatEatFatGatGatGatHatIatJatKatLatMatNatOamHasyatJaaIatPasDaoDanSarzamHamHamHamHamHamHamHcuRctlauOaafaaaaafaoDanSaoDaagaagaagatSatTatSasJasJaqCaqCatUaqCaqCasKanXanXanXatVanXanXanXatWatXaobaobaobaobaobatYamwatZaoSahxapTaqPaqOauaaqRaubaucaudaueaufaugauhauiaujaukaulaumateaunauoauoaupasfauqatoaqcaqcaqcaqcaqcatoaurausatoaafaafallamlamlallallaowaowaowaowaowaowaowaowaowallautauuallallallallallallallauvauwauxauyauzauAauBauCatvauDaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaqparpasuauEaqparpauFauEaqpamHauGamHamHamHamHamHasyatJanSauHauIanSanSamHasyatJauJaafauJamHanScvjamHauKauLamHasIapAaszasAasAauNauOauOauOasAauMaytauOauOauOauNauQauNauNauRauNauSauRauTauUauVauWauWauWauWauWauWauWauXauYauWauWauWauWauZavaavbavbavcavdapTarRarSarSavfarUavgavhatfavjaxZavlavmavnavoavpavqavraunauoauoaupasfaveatoaqcaqcaqcaqcaqcatoavtausapWaaaaaaallavuamlamlavvallavwanLavxavyanKallatqanKallavzamlallavAamlallavBavCavDavEatsatsavFavGavHavIavJavKavLaroabtabtaaIaaIabtabtabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarparpasuarparparpasuarparpasvanSanSaswaswarzasxasyaszasAasAasAasAasAasAasBasCasDaaIasEamHanSasGasHarAasxamHasIanSanSanScbIauOaaaaaaaafaoDanSaoDaaaaaaaaaaqCaqCaqCasJasJaqCasJasJasJaqCasKanXasLasMasNasOasPasQasRasSaobasTasUasVaobasWamwamyaoSahxapTapTapTapTapTasXasYapTasZataatbapTapTatcatbapWatdateamPatgatgathatiatjatkaqcaqcaqcaqcaqcatlatmatnatoaaaaaaalmamlamlatpamlaowatqamlatratsatsatsatsattatsatuamlamlamlamlamlamlamlamlallasjaroatvatwatwaroatxatyatzaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpatAatBatCarpatDatBatCarpapAatEatFatGatGatGatHatIatJatKatLatMatNatOamHasyatJaaIatPasDaoDanSarzamHamHamHamHamHamHamHcbJcbIauOaafaaaaafaoDanSaoDaagaagaagatSatTatSasJasJaqCaqCatUaqCaqCasKanXanXanXatVanXanXanXatWatXaobaobaobaobaobatYamwatZaoSahxapTaqPaqOauaaqRaubaucaudaueaufaugauhauiaujaukaulaumateaunauoauoaupasfauqatoaqcaqcaqcaqcaqcatoaurausatoaafaafallamlamlallallaowaowaowaowaowaowaowaowaowallautauuallallallallallallallauvauwauxauyauzauAauBauCatvauDaroaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaqparpasuauEaqparpauFauEaqpamHauGamHamHamHamHamHasyatJanSauHauIanSanSamHasyatJauJaafauJamHanSccAamHauKauLamHasIapAaszasAasAauNauOauOauOasAauMaytauOauOauOauNauQauNauNauRauNauSauRauTauUauVauWauWauWauWauWauWauWauXauYauWauWauWauWauZavaavbavbavcavdapTarRarSarSavfarUavgavhatfavjaxZavlavmavnavoavpavqavraunauoauoaupasfaveatoaqcaqcaqcaqcaqcatoavtausapWaaaaaaallavuamlamlavvallavwanLavxavyanKallatqanKallavzamlallavAamlallavBavCavDavEatsatsavFavGavHavIavJavKavLaroabtabtaaIaaIabtabtabtabtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavNavNavNavOavNavNavNavPavQavRavPavPavPavSamHavTatJaDravUavVanSavWamHasyavXasAasAasAasAauMasAasCanSavVavYanSanSavZawaawbawcawdawdawdaweawdawfawdawdawgawhawiawjawjawjawjawjawjawkawlawmawnawnawnawnawnawnawnawoawnawpawpawpawpawpawqawrawsawtawuapTapTapTapTapTawvawwawxawyawzawAawBaviawDawEawFawGawHawIawJawJavsawLawMawNaqcaqcaqcaqcaqcawOawPawQapWaaaaaaallamlamlamlamlamlamlavDatsatsatsatsatsatsatsawRamlamlamlamlasnamlamlarjawSawTawUawVawWawXatwatwatwawYaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMawZaxaawZaxbaxaaxaaxcawZaxaaxdaxeaxfaxfaxgamHavTatJaxhanSanSaxiaxjamHaxkarvarvarvarvarvarvaxlatJaxmanSamHasvasvaxnapNaqCaxoaxpaxqaxqaxraxqaxsaxqaxqaxtaxoaxuaxvaxvaxvaxvaxvaxvaxvavZaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLamwaxMacAaeUapTaqPaqOaxNaqRaxOaxPaxQaxQaxQaxRaxSaxTaxUaxVaulaxWaxXaxYaHFayaaybatiaycaydaqcaqcaqcaqcaqcaydapWapWapWallallallanKallallaoyallallarjallallayeallallaoyallarjavuallallaoyallamlavuarjawSayfaroaygavGayhayiayjavGaykaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpavMaylavMaBGaxaaxaaMBavMaylavMayqayraxbaysamHavTavXaytasAasAasCayuayuallasnallayuayuayuayuayvaywauQauNauNauNauNayxapNarBaxoaaaaafaaaayyaaaayzaaaaafaaaaxoaxuaxvayAayBayCayDayEaxvavZayFayGayHayIayJayKayLayMayMayNayOayOayOayPaxKayQamwayRacAaeUapTarRarSarSaySarUayTayUayVayWayXayYayZayZazaayZapWazbazcazdazeazfazgapWaydaqcaqcaqcaqcaqcaydallaqoamlawTazhallallallaqoamlallaqoarjallaziamlallazjamlallazkazlallazmamlallaoyaoyarjaznazoaroazpavGazqazrazqavGazsaroaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6732,42 +6733,42 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNcuCctMcuCafNbERbERbERbwlbESbxrbETbEUbEVbEWbwlbBcbEXbBcbBcbEYbEZaaabFabFbbFcbFdbDIbDIbFebDIbFfbFgbFhbDIbBdbDLbFibFjbBhaGfbFlbFmbFnbFobCvbFpbBjbzibFqbFrbFsbFrbFtbFubtXbFvbCIbFwbCIbFxbtSbFybCJbFAbtXbFCbCCbCCbCCbCCbGNbmSbPIbFEbFFbFGbBEbFHbvlbFIbBKbBKbFJbFKbFLbFMbFNbBMbCWbCWbCWbCWbCWbCWbCWbBMbFObFPbFQbFRbFSbFTbFUbFVbtbbFWbFXbEDbFYbEDbEDbEDbEDbEDbEDbEDbDnbFZbDpbGbbGcbGdbGebGfbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbGgbENbEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekajxctyajxaekbERbGhbGibwlbGjbxrbGkbxrbxrbEWbwlbGlbGmbGnbBcbEYbEZaafbFabGobGpbGqbGrbGsbGrbGrbGtbGubGrbGrbGvbGwbGxbGybBhbGzbBhbBhbBhbBhbGAbGBbGCbGDbGEbGFbGGbGHbGIbGIbtXbGJbGKcltbGMbGQbtXbGObGPbGSbtXbGRbDqbEHbDrbFDbGWbmSbGXbGYbpFbGZbHabHbbHcbCRbHdbAQbBKbHebAwbzibgibBMbBMbHfbCWbCWbHgbHfbBMbBMbHhbHibHjbHkbHlbBNbHmbHnbtbbHobHpbHqbHqbHrbHsbHtbHqbHubHvbHwbHxbHybGabHAbHBbHCbHDbHEbEMaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObHGbHHbHIbEObHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajxajxajxctLbHKbxrbxrbHLbGjbxrbxrbxrbxrbEWbwlbHMbGnbHNbBcbEYbEZaaabFabHObHPbHQbDIbDIbHRbDIbHSbHTbHUbHVbBdbHWbHXbHYbHZbIabIbbIbbIbbIbbIbbIcbIbbIdbIebIfbIgbIhbIibIjbtSbtSbtSbtSbtSbtSbtSbtSbtSbtSbMNbMNbMNbMNbMNbMNbOnbOCbmSbmSbmSbmSbIlbImbhjbAwbAwbAwbAwbAwbAwbzibgibBMbInbIobIpbIqbIrbIsbInbItbHhbHibHjbIubIvbIwbIxbIybuwbIzbDdclFbIAbIBbICbIDbIEbEDbEDbIFbDnbIGbGLbIIbDdbIJbIKbIKbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObILbIMbIMbIMbINbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrcuQbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxcvkbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZctzctAafNbERbERbERbwlbwlbERbERbERbwlbwlbwlbWBbBcaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAbKBbKCbKDbKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebsbbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaeYctjctkctjaeWaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBaVQbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGbLHbpobLJbLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWcuEbLYcuFbMabMbbMcbDnbMdbsbbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYbJYbJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGbMRbMSbMTbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebsbbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbBcbJYbBcbJYbBcbBcbBcbBcbBcbBcbJYbJYbJYbBcbBcbBcbGnbGncvmcvlbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebsbbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBccvncvpcvocvpcvqcvscvrcvtbGncvubOsbOubOtbGnbGncvlbGnbGnbJYbJYbJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbpCbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbsbbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvwcvvcvycvxbBcbGnbBcbGnaoybPxbGnbGnbGnbPybBcbJYbJYbBcaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbGTbGUbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagbJYcvzcvpcvAcvAcvAbBccvBbBccacbBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbxkbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbUobCWbRhbRibKKbRjbKKbRkbRlbCWbUobCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbOpbSsbGVbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvpcvCcvEcvDcvGcvFcvIcvHbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbGVbjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekctyctyctyaekbERbIObIPbIQbIRbxrcuQbISbITbIUbwlbBcbBcbBcbBcbEYbDCaafbIVbDEbIWbDGbIXbDIbIYbDIbDIbDIbDIbDIbBdbDLbIZbJabJbbJcbJcbJcbJcbJcbJcbJdbJebJfbJgbJhbJibJjbJkbJlbJmbJnbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJmbJobJpbmSbGXcqlbBDbJrbBEbJsbJtbJubJvbJvbJwbJxbJgbJybJzbBMbJAbJBbJCbJDbJEbJFbJGbItbItbItbItbItbItbJHbJIbJJbJKbJLbDdbDnbDnbDnbDnbDnbDnbJMbEDbEDbDnbjobvZbgxbDdbJNbJObJPbJQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJRbJSbJRbIMbJTbIMctxcdwbENaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafNajZctzctAafNbERbERbERbwlbwlbERbERbERbwlbwlbwlbWBbBcaaabJYbJZbEZaaaaaaaafaaabBdbKabKbbKcbDIbKdbKebKfbKgbKhbKibKjbKkbKlbKmbKnbKobKpbKqbKmbKmbKmbKmbKmbKrbKsbKmbKmbKtbKmbKubKmbKmbKmbKmbKmbyebyebyebyebyebyebyebyebKvbKwbmSbKxbKybKzbKAceebKCcfebKEbKFbKFbKGbKFbKFbKHbKIbBMbKJbKKbKLbKKbKMbKKbKNbKObKPbKQbKRbKSbKTbKUbyqbHnbqibKVaafbKWbKXbKYbKZbLabKZbLbbLcbLdbDnbLebsbbLfbDdbDdbDdbDdbDdaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEObLgbIMbIMbIMbLhbEObEOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaeYctjctkctjaeWaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYaafbJYbEYbEZaafaafaafaafbBdbBdbBdbBdbBdbBdbBdbBdbBdbBdbLjbLkbLlbLmbKmbKnbKobKpbKqbLnbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBaVQbLDbLDbLDbLDbLDbLDbLEbyebKvbLFbLGbLGbLGbLGbLGcfjbpocgubLGbLGbLGbLGbLGbLGbLFbLKbLLbLMbLNbLObLNbLPbLQbLRbLSbLSbLSbLSbLSbLSbLTbLUbLVbqibKVaafbKWbLWbLWcuEbLYcuFbMabMbbMcbDnbMdbsbbkFbjobMebMfbjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaafaafbHFbEObMgbMhbMibMjbHFaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaafaaaaafaaIaafbJYbGnbJYbJYbJYbEYbEZaaaaaaaaaaafbMkbMlbMlbMmbMnbMobMobMpbMpbMkbDLbMqbKkbMrbKmbMsbMtbMtbMubMvbLnbMwbMxbMybMzbMAbMBbMCbMDbMEbMFbMGbMFbMHbMIbMJaafbMKbMKbMKbMKbMKbMLbyebKvbMMcqzbMObMPbMQbLGcgxbNScgCbLGbMUbMVbMWbMVbMUbLFbMXbBMbKKbKKbKKbMYbKKbKKbMZbNabNbbNbbNcbNbbNbbNdbNebNfbNgbKVaafbKWbLWbNhbKZbNibKZbNjbNkbNlbDnbsebsbbkFbjobsebsebjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbEObENbNmbENbMjaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBcbBcbBcbJYbBcbJYbBcbBcbBcbBcbBcbBcbJYbJYbJYbBcbBcbBcbGnbGncjWcjjbEYbEZaaaaaaaaaaafbMkbNnbMmbMmbMmbMmbMobYnbNpbNqbNrbKjbNsbNtbNubNvbNwbNxbNybNzbNAbNwbNwbNwbNybNBbNCbNDbNEbNFbLBbNGbNHbNIbNJbNKbLDbNLbNMbNNbNObMKbMLbNPbKvbLFbNQbMUbMUcrqbLGbNRbNSbNTbLGbMVbNUbMVbNVbNWbNXbNYbBMbNZbOabObbOcbOdbOebOfbOgbOhbOibOjbOkbOlbItbOmbZlbOobOpbOpbDnbDnbDnbDnbDnbDnbDdbDdbDdbDnbsebsbbOqbsebsebOrbjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObENaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcckCcuRctlcuRcvjcvlcvkcvmbGncvnbOsbOubOtbGnbGncjjbGnbGnbJYbJYbJYbJZbEZaaaaafbJYbJYbMkbMmbMmbOwbOvbMmbOxbMobMobOzbDLbMqbOAbOBbZmbODbOEbOFbOGbOHbOIbOFbOJbOFbOKbOLbOMbLubONbOObOPbOQbORbOSbOTbOUaafbOVbOWbNObOXbMKbMLbNPbKvbLFbOYbOZbMUbPabLGbpCbPcbPdbLGbMUbPebPfbMUbMUbLFbKvbBMbItbItbItbItbJHbPgbPhbPibJHbItbItbItbItbItbPjbPkbPlbPmbPnbPobPpbPqbPpbPrbOpbPsbPtbPubPvbPwbsbbkFbjobjobjobjoabtaafaafaafaagaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccvpcvocvrcvqbBcbGnbBcbGnaoybPxbGnbGnbGnbPybBcbJYbJYbBcaaabJYbEYbEZaaaaafbJYbPzbPAbPBbMmbMmcbdbPDbPDbPDbPEbPFcbebMqbOAbPHccdbPJbPKbMFbPLbPMbPNbPObPPbPQbPRbPSbPSbPTbPUbLBbPVbPWbPXbPYbPZbQabQbbNLbQcbNObNObMKbMLbNPbKvbLFbQdbMUbQebLHbLGbLGbQfbLGbLGbQgbQhbQibQgbQgbLFbKvbBMbQjbQkbQkbQlbQmbKKbQnbQobQpbQqbCWbCWbCWbItbQrbQsbQtbQubQvbPobQwbQxbQybQzbOmbPtbQAbPtbPvbBRbGTbGUbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagbJYcvscuRcvtcvtcvtbBccvubBccacbBcbPxbGnbGnbQDbQEbBcaaaaafaaaaaabJYbEYbDCbBcbBcbBcbQFbMkbQGbMmbMmcqmbQHbQIbQJbQKbMkcqnbMqbOAbPHcqobQLbQMbMFbMFbQNbLnbQObQPbQQbQRbMFbMFbLubQSbQTbQUbQVbQWbQXbQWbQYaafbMKbMKbMKbMKbMKbMLbyebKvbLFbQZbRabRabRbbRcbxkbRebRfbRgbMUbPebMUbMUcqpbLFbKvbBMbCWbUobCWbRhbRibKKbRjbKKbRkbRlbCWbUobCWbItbRmbRnbRobRpbRqbRrbRsbRtbRrbRubOpbRvbPtbRwbPvbOpbSsbGVbjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcbBccuRcvvcvxcvwcvzcvycvBcvAbBcbBcbBcbRAbBcbBcbBcbJYbJYbJYbRBbRCbRDbREbRFbRGbRCbRHbPFbPFbPFbPFcqrbMkbMkbMkbMkbMkcqtbRKbOAbRLbKmbRMbRNbPNbRObPNbLnbMFbMFbMFbQRbRPbRQbRQbRRbRSbRTbNGbRUbRVbRWbNKbLDbNLbRXbRYbRYbMKbMLbyebKvbRZbSabSabSabSbbScbMUbSdbMUbMUbMUbPebMUbMUbMUbLFbKvbBMbCWbCWbCWbSebSfbQobSgbKKbShbSibQkbQkbSjbItbSkbSlbPlbSmbSnbPobQybSobRrbSpbOpbSqbSqbSqbPvbSrbSsbGVbjoaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafbRzaaabBcbBcbBcbBcbBcbBcbBcbBcbBcbBcbGnbGnbGnbGnbGnbGnbGnbSFbSGbSHbSIbSJbSKbSKbSKbSKbSLbSMbSMbSMbSNcqubSObDybDybSPbBccqnbMqbOAbSQbSRbSSbSTbRQbRQbSUbSVbRQbRQbSWbSXbSYbMFbSZbTabTbbTcbMFbTdbTebTfbOUaafbOVbTgbThbTibMKbMLbNPbTjbTkbTkbTkbTlbLFbTmbQZbTnbTobTpbTqbTrbTsbTsbTtbLFbKvbBMbItbItbItbItbTubTvbRjbTwbTubItbItbItbItbItbTxbTybTzbTAbTBbTCbTCbTCbTCbTDbOmbSqbSqbTEbPvbTFbSsbGVbjobjobjoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabStbSubSubSubSubSvbSwbSwbSxbSybSzbSAbSBbSCbSDbSEbBcbTMbJYbJYbJYbJYbJYbJYbJYbJYbDCbTNbTObTObTObTObTObTObTObTObTPbTPcqxbTPbTPbTQbTRbBccqnbMqbOAbSQbTSbTTbTUbTVbPSbTWbTXbPSbPSbTYbTZbUabUbbUcbUdbUebUfbMFbTdbUgbUhbQabQbbNLbUibRYbRYbMKbMLbNPbUjbyebyebyebNYbLFbUkbMUbMUbUlbUmbUnbVibUpbVibUnbLFbKvbBMbQjbQkbQkbUqbQmbKKbQnbQobUrbUsbCWbCWbCWbItbUtbUubUvbUwbRnbRpbUxbUybUzbUAbOpbSqbSqbSqbPvbTFbSsbGVbsebsebjoaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabJYbJYbJYbGnbTHbTIbTJbTKbTLbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjcvJbzibzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWcqUbCWbVjbRibKKbRjbKKbRkbVkbCWcqUbCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbHzbjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUDbGnbUDbGnbUEcvKbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbVFbVGbVHbVIbVJbUGbVKbVLcqEbVNbVObTPbTRbBccqnbMqbOAbVPbVQbKmbVRbVSbKmbVTbVUbVVbKmbVWbQRbVXbLnbVYbUfbMFbUdbVZbWabRVbWbbNKbLDbNLbWcbWdbWebMKbMLbyebUjbyebABbUZbNYbLFbWfbWgbWhbWibUmbWgbWjbUpbWjbNVbNXbKvbBMbCWbCWbCWbWkbWlbQobSgbKKbShbWmbQkbQkbSjbBMbPvbWnbWobWobPvbPvbWpbWqbWrbWsbWtbWubTCbWvbSqbSqbSsbGVbjobWwbjobWxbjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaaaaafaaaaaabJYbJYbJYbGnbTHbTIbTJbTKbTLbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbUHbUIbUJbUKbULbUGbUMbUNcqCcqybTPbTPbTRbBccqDbMqbOAbURbUSbUTbUTbUUbKmbKmbKmbKmbKmbUVbUWbLnbLnbLnbUXbMFbTbbMFbTdbTebUYbOUaafbMKbMKbMKbMKbMKbMLbNPbUjcvCbzibzibNYbMMbVabVbbVcbVdbVebVfbVgbUpbVgbVhbLFbKvbBMbCWcqUbCWbVjbRibKKbRjbKKbRkbVkbCWcqUbCWbItbVlbVmbVnbVobVpbVqbVrbVsbVtbVubOmbVvbVwbVxbPvbSqbSsbHzbjobsebjobjobjoaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaagaagbUDbGnbUDbGnbUEcvDbTIbUFbGnbBcbGnbJYaaaaaaaafaaaaaaaafaaabDCbTNbTObUGbVFbVGbVHbVIbVJbUGbVKbVLcqEbVNbVObTPbTRbBccqnbMqbOAbVPbVQbKmbVRbVSbKmbVTbVUbVVbKmbVWbQRbVXbLnbVYbUfbMFbUdbVZbWabRVbWbbNKbLDbNLbWcbWdbWebMKbMLbyebUjbyebABbUZbNYbLFbWfbWgbWhbWibUmbWgbWjbUpbWjbNVbNXbKvbBMbCWbCWbCWbWkbWlbQobSgbKKbShbWmbQkbQkbSjbBMbPvbWnbWobWobPvbPvbWpbWqbWrbWsbWtbWubTCbWvbSqbSqbSsbGVbjobWwbjobWxbjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbJYbJYbJYbVzbVAbVBbVCbVDbGnbVEbGnbJYaaaaaaaaaaaaaaaaaaaaabDCbTNbTObWCbWDbWEbVHbWFbWCbWCbVKbWGcqGcqFbWIbTPbTRbBccqnbMqbWJbWKbWKbWLbWMbWNbWObWPbWQbWRbKmbMFbQRbWSbWTbVYbWUbMFbUdbVZbTdbTebWVbOUaafbOVbWWbWXbWYbMKbMLbyebUjbyebGHbGHbNYbLFbLGbWZbXabLGbXbbLGbLGbLGbLGbLGbLFbKvbBMbItbItbItbItbTubXcbRjbXdbTubItbItbItbItbBMbRrbXebRrbRrbRrbPvbWpbWqbXfbXgbXhbXibUwbXjbPvbSqbSsbGVbjobsebsebsebXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbJYbWybWzbWzbWAbTLbWBbBccvLcvLaaabXlaaaaaaaaaaaaaaabEZbTNbTObWCbWCbXmbXnbXobWCbXpbXqbXrcqIcqHbXsbTPbTRbBccqJbXwbCrbWKbXxbXybXybXzbXAbXBbXCbXDbKmbXEbXFbVXbLnbVYbXGbMFbXHbVZbTdbXIbXJbQabQbbNLbXKbWdbWdbMKbMLbNPbUjcvMbyebXLbNYbXMbSabSabXNbLGbIHbIkbQBbyebXRbXSbKwbKvbBMbQjbQkbQkbXTbQmbKKbQnbQobXUbXVbCWbCWbCWbBMbXWbRrbRrbRrbRrbPvbXXbXXbXYbXZbOpbOpbUwbOpbPvbOpbSsbGVbjobYabYbbYcbXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabqabfabfabfabfabfaaaaaabBcbBcbBcbBcbBcbBcbVEbBcbBcbBcbBcaafaaaaaaaafaaIbYdaaaaaaaaabEZbTNbTObYebYfbYgbYhbYibYjbYkbYlbYmcqMcqKbYobTPbYpbYqbYrbYsbGybWKbYtbXybYubYvbYwbYxbYybYzbYAbNFbYBbLnbLnbLnbYCbMFbYDbYEbTdbTebMFbOUaafbMKbMKbMKbMKbMKbMLbNPcbxcvNbyebYFbYGbYHbTkbYIbYJbyebRybQCbTGbyebYNbKFbYObYPbBMbCWbUobCWbYQbRibKKbRjbKKbRkbYRbCWbUobCWbBMbYSbRrbYTbRrbRrbYUbYVbYWbYXbYYbOpbUwbUwbYZbPvbBRbZabUBbjobZcbZdbsebXkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaacfaaaaafaaaaafaaaabfaafaafbBcbGnbGnbGnbGnbGnbGnbGnbGnbWBbJYaaaaaaaaaaaIbZfbZgaaIaaIaafbEZbTNbTObZhbWCbUGbUGbUGbWCbZibZjbZkcqGcqNcqPbTPbBcbBcbZnbZobZpbWKbWKbZqbXybZrbZsbZtbZsbZubKmbMFbZvbZwbZxbZybONbZzbZAbZBbWabRVbZCbNKbLDbNLbZDbZEbZEbMKbMLbNPbyecvObyebyebZFbZGbyebZHbZIbyebyebZJbyebyebZIbZKbZLbZMbBMbCWbCWbCWbZNbZObQobZPbKKbShbZQbQkbQkbSjbBMbRrbRrbZRbRrbRrbPvbXXbXXbZSbZTbOpbZUbZVbZWbPvboUbZabGVbjobjobjobsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXbZYbZZaaabZXbZYbZZaaabZXbZYbZZaaaabfaaaaaabJYbZebGnbBcbBcbBcbRAbBcbBcbBcbBcaaaaaaaaacafaaIaaIaafaaaaaabEZbTNbTObWCcagcahbUGcaibWCbWCbVKcajcqGcqKcakbTPcalcamcancaocapcaqcarcascatcascatcaucatcavbKmcawcaxcaybPSbPSbPUbRPcazbRUbPVbTecaAbOUaafbOVcaBcaCcaDbMKbMLbyebzibUjcaEcaFbZFcaGbyebZHcaHcaIcaJcaKcaLcaIcaMbZHbgxcaNbBMbBMbBMbBMbBMbBMcaOcaPcaObBMbBMbBMbBMbBMbBMbPvbPvbPvbPvbPvbPvcaQcaQcaRcaSbPvbPvbPvbPvbPvbjobRxbGVbjocaTcaUbsebjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXcaVbZZaaabBccaVbZZaaabZXcaVbZZaafaafaaaaaabJYcaacabbBccacbGnbGncadbOucaebBcaaaaaaaaaaaaaafaaaaaaaaaaaabDCbTNbTObUGcaYcaZbUGcbacbbbUGbVKcbccqEcqQcqVcuPcqXcqWbOAaZDcbgcbhcbicbjcbkcblcbmcbnbXycbobKmcbpbMFbZvbRPbRQcbqcbrcbscbtbLAcbucbvbQabQbbNLcbwbZEbZEbMKbMLbyebzicvPcbzcbAcbBcbCbyecbDcbEcbFcbGcbHcbGcbIcbEcbJbgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjocbMbMfbkGcbNcbNbPvcbOcbOcaRbQtcbPcbQbsebsebsebBRbRxbHzbjocbRbsebsebjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXcaVbZZaafbZXcaVbZZaafbZXcaVbZZaaaaafaafaafbBcbJYbBcbBcbBccvQcvScvRbGnbQDbBcaaaaaaaaaaaaaafaaaaaaaafaaabDCbTNbTObUGcbScbTcbUcbVcbWbUGcbXcbYcbZccaccbbTPccccqYcceccfccgcchcciccjcckcclccmccnccoccpccqccrbMFbZvcctbMFbMFbMFcctcctcctbTeaVSaVRaafbMKbMKbMKbMKbMKbMLbyebYFccuccvccwccxccybyebyecczcdncdnbKwccCccDbyebyebgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjobseccEbqvccFccGbPvccHccHccIbQtbPvbOpbjoccJccKbBRbRxbGVbsebsebsebUCbkHbVybkHaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaafaafbBcccRbBccaWcaXcvTbRAbBcbBcaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmbMFbOQccscctbMFbMFbMFbMHbSYcctbTecctbKmaafaafaafaafaafaafbMLcdjcdjcdjcdkcvdcdjcdjcdjcvUcvWcvVcdncvXcdncdnbyecvYbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbUBbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccvZbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhcctbKmbKmbKmaaaaaaaafaaacdVcdWcdXcdYcdZceacebceccdjcwabziccBcwbbKwcwcccBbzibzicwdbntceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqbXOcesbjobjocetceoceuceocevbGVbjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacexaaaaaaaaacexaaaaaaaaacexaaaaaaaafcducducduceycezceAceBceCbGnceDceEceFceEceEceEceEceEceEceEceEceEceEceGceHbRGceIceJceKceKceKceKceKceKceKceKceKceKceKceKceKceKccTccUceLceMceNceOcePceQceRceSceTceKcdbcdLcdMcdNcdOcdPcdQcdRbMFcdScdTcdUbLCcdibLCaaaaaaaafaaacdjceXceYceZcfacfbcfccfdcdjbzibzicdncdnbyecdnccBbDZbFMcfkcflcflcflcflcflcflcflcfmcfncflcflcflcflcflcflcfocfpcfqbmicfrcfscftcftcftbXPbYKbXkbYMbYLcbfbZbbZbccLccMbjocaUbsecfCbjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbJYbWybWzbWzbWAbTLbWBbBccvEcvEaaabXlaaaaaaaaaaaaaaabEZbTNbTObWCbWCbXmbXnbXobWCbXpbXqbXrcqIcqHbXsbTPbTRbBccqJbXwbCrbWKbXxbXybXybXzbXAbXBbXCbXDbKmbXEbXFbVXbLnbVYbXGbMFbXHbVZbTdbXIbXJbQabQbbNLbXKbWdbWdbMKbMLbNPbUjcvFbyebXLbNYbXMbSabSabXNbLGbIHbIkbQBbyebXRbXSbKwbKvbBMbQjbQkbQkbXTbQmbKKbQnbQobXUbXVbCWbCWbCWbBMbXWbRrbRrbRrbRrbPvbXXbXXbXYbXZbOpbOpbUwbOpbPvbOpbSsbGVbjobYabYbbYcbXkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabqabfabfabfabfabfaaaaaabBcbBcbBcbBcbBcbBcbVEbBcbBcbBcbBcaafaaaaaaaafaaIbYdaaaaaaaaabEZbTNbTObYebYfbYgbYhbYibYjbYkbYlbYmcqMcqKbYobTPbYpbYqbYrbYsbGybWKbYtbXybYubYvbYwbYxbYybYzbYAbNFbYBbLnbLnbLnbYCbMFbYDbYEbTdbTebMFbOUaafbMKbMKbMKbMKbMKbMLbNPcbxcvGbyebYFbYGbYHbTkbYIbYJbyebRybQCbTGbyebYNbKFbYObYPbBMbCWbUobCWbYQbRibKKbRjbKKbRkbYRbCWbUobCWbBMbYSbRrbYTbRrbRrbYUbYVbYWbYXbYYbOpbUwbUwbYZbPvbBRbZabUBbjobZcbZdbsebXkaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaacfaaaaafaaaaafaaaabfaafaafbBcbGnbGnbGnbGnbGnbGnbGnbGnbWBbJYaaaaaaaaaaaIbZfbZgaaIaaIaafbEZbTNbTObZhbWCbUGbUGbUGbWCbZibZjbZkcqGcqNcqPbTPbBcbBcbZnbZobZpbWKbWKbZqbXybZrbZsbZtbZsbZubKmbMFbZvbZwbZxbZybONbZzbZAbZBbWabRVbZCbNKbLDbNLbZDbZEbZEbMKbMLbNPbyecvHbyebyebZFbZGbyebZHbZIbyebyebZJbyebyebZIbDZcgzcvIbBMbCWbCWbCWbZNbZObQobZPbKKbShbZQbQkbQkbSjbBMbRrbRrbZRbRrbRrbPvbXXbXXbZSbZTbOpbZUbZVbZWbPvboUbZabGVbjobjobjobsebjoaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXbZYbZZaaabZXbZYbZZaaabZXbZYbZZaaaabfaaaaaabJYbZebGnbBcbBcbBcbRAbBcbBcbBcbBcaaaaaaaaacafaaIaaIaafaaaaaabEZbTNbTObWCcagcahbUGcaibWCbWCbVKcajcqGcqKcakbTPcalcamcancaocapcaqcarcascatcascatcaucatcavbKmcawcaxcaybPSbPSbPUbRPcazbRUbPVbTecaAbOUaafbOVcaBcaCcaDbMKbMLbyebzibUjcaEcaFbZFcaGbyebZHcaHcaIcaJcaKcaLcaIcaMccBbgxcaNbBMbBMbBMbBMbBMbBMcaOcaPcaObBMbBMbBMbBMbBMbBMbPvbPvbPvbPvbPvbPvcaQcaQcaRcaSbPvbPvbPvbPvbPvbjobRxbGVbjocaTcaUbsebjoaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXcaVbZZaaabBccaVbZZaaabZXcaVbZZaafaafaaaaaabJYcaacabbBccacbGnbGncadbOucaebBcaaaaaaaaaaaaaafaaaaaaaaaaaabDCbTNbTObUGcaYcaZbUGcbacbbbUGbVKcbccqEcqQcqVcuPcqXcqWbOAaZDcbgcbhcbicbjcbkcblcbmcbnbXycbobKmcbpbMFbZvbRPbRQcbqcbrcbscbtbLAcbucbvbQabQbbNLcbwbZEbZEbMKbMLbyebzicvJcbzcbAcbBcbCbyecbDcbEcvKccBcvLccBbDZbFMcfibgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjocbMbMfbkGcbNcbNbPvcbOcbOcaRbQtcbPcbQbsebsebsebBRbRxbHzbjocbRbsebsebjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXcaVbZZaafbZXcaVbZZaafbZXcaVbZZaaaaafaafaafbBcbJYbBcbBcbBccvMcvOcvNbGnbQDbBcaaaaaaaaaaaaaafaaaaaaaafaaabDCbTNbTObUGcbScbTcbUcbVcbWbUGcbXcbYcbZccaccbbTPccccqYcceccfccgcchcciccjcckcclccmccnccoccpccqccrbMFbZvcctbMFbMFbMFcctcctcctbTeaVSaVRaafbMKbMKbMKbMKbMKbMLbyebYFccuccvccwccxccybyebyecczcvPcdnbKwccCccDbyebyebgxcbKbjoaaaaaaaaaaafaaaaaacbLaaaaafaaaaaaaaaaaabjobseccEbqvccFccGbPvccHccHccIbQtbPvbOpbjoccJccKbBRbRxbGVbsebsebsebUCbkHbVybkHaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaafaafaaaaaaaafaafbBcccRbBccaWcaXcvQbRAbBcbBcaaaaafaaaaaaaafaaaaaaaafaaabDCbTNbTObTObTObTObTObTObTObTObTPbTPbTPbTPbTPbTPbBcccSbBcccTccUccUccUccVccWccXccUccYccZcdabKmbMFbOQccscctbMFbMFbMFbMHbSYcctbTecctbKmaafaafaafaafaafaafbMLcdjcdjcdjcdkcvdcdjcdjcdjcvRcvTcvScdncvUcdncdnbyecvVbZGcbKbjobXkbXkbXkbjobXkbXkcdpbXkbjobXkbXkbXkbXkbjobjobRxcdqbjobjobPvbPvbPvcdrcdsbPvbBRbjobYcbseboTbRxbUBbjobjocdtbjobjobjobjoaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXcaVbZZaaabZXcaVbZZaaabZXcaVbZZaaaaafaaaaaacducdvcdvcdvcdvbBcbBccvWbGnbBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbDCbTNbBccdxcdycdzcdzcdzcdzcdzcdzcdzcdzcdzcdAcdAcdzcdBcaWccTcdCcdDcdEcdFcdGcdHccUcdIcdJcdKbKmcdbcdcbPXcddcdecdfcdecddcdgcddcdhcctbKmbKmbKmaaaaaaaafaaacdVcdWcdXcdYcdZceacebceccdjcvXbzicvYcwacvZcwbcbGbJxbJxcwdcwcceiceiceiceiceiceiceicejcekcekcekcekcekcekcelcekcemcekcekcenceocepceqbXOcesbjobjocetceoceuceocevbGVbjocewbsebsebjoaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacexaaaaaaaaacexaaaaaaaaacexaaaaaaaafcducducduceycezceAceBceCbGnceDceEceFceEceEceEceEceEceEceEceEceEceEceGceHbRGceIceJceKceKceKceKceKceKceKceKceKceKceKceKceKceKccTccUceLceMceNceOcePceQceRceSceTceKcdbcdLcdMcdNcdOcdPcdQcdRbMFcdScdTcdUbLCcdibLCaaaaaaaafaaacdjceXceYceZcfacfbcfccfdcdjbzibzicdncdnbZGcdnccBbDZbFMcfkcflcflcflcflcflcflcflcfmcfncflcflcflcflcflcflcfocfpcfqbmicfrcfscftcftcftbXPbYKbXkbYMbYLcbfbZbbZbccLccMbjocaUbsecfCbjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafalkcfEcfEcfFcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfGcfHcfIcfJcfIcfKcfLcfMcfNceEcfOcfPbOubBcbJYbJYbJYbJYbJYbJYbJYbJYbJYbBcbBccfQbSKcfRcfSceKcfTcfTcfUceKcfVcfWcfXctHcfZcgacgbcgccgdcgeccUcgfcggcghcgicgjcgkcglcgmcgnceKbKmcsKbLuceVbLuceUbLuceVbLuceWbLucsNbKmbKmbKmaafaafaafaaacdjcgqcgrcgscgtcwecgvcgwcdjcwfbziccBccBcwgcdnccBccBcwhbyebjobXkbXkbXkbXkbjobXkbXkbXkbXkbjobXkbXkbXkbXkbjocgEbsebjocgFcgGbjobjobXkbXkbjobjocgHbZacgIbjocgJcgKboRbjobjobjobjobjoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaaaaaacgLaaaaaaaaacgLaaaaaaaaacgLaaaaaaaafcducducducgMcgNcgOcdvbGnbGnbGnbGnbBcaaaaaaaafaaaaaaaafaaaaaaaafaaabBccgPbBccgQcgRceKcgScgTcgUcgVcgWcgXceRceRceRcgYcgZchachbcgXccUchcchdchecgictIccUchgchhchiceKaafcgoaafbMLaafcgoaafbMLaafcgpaafcgpaafaafaaaaaaaaaaafaafcdjchmchnchochpchqchrchschtchucwjcwiccBbKwccBcwkcdnbyebyeaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjochybLebjochzbZabjoaaaaaaaaaaaabjobsebZachAchBchBchCchDchBaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcbBcbJYchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaafcihciichncijcikcilcimcincdjcdmcdncdncdncdocdncdncdnbABabtcvLcvLaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcciwbHNchGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcvecjhcjicdjcedcwlcefcegcehccBccBccBbzicwmcvmcwmaagaaaaaaaafaaabXkbXkbXkbjobjobjobjobjobjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnceFbGnbZechGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaafaafaafaafcnDaafcdjcdjcdjcjQcjRcjScvfcjUcjRcedcwnccBcffcfgcfhcficcBcwoabtcvLcvLaagaafaafaafaaabXkckFcwpbjobsecwqcwrclKbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfaafaaabZXchEbZZaaabZXchEbZZaaabZXchEbZZaaaaafaaaaaacducdvcdvcdvcdvchFbWBbGnbGnbBcbBcbJYchGchGchGchGchGchGchGaafbBcbBcbBcchHchIceKchJcgUcgUcgVchKchLchLchMchNchOchPchPchQceRccUchRchSchTchUchVccUchWcdJchXceKbMKchjbOVchjbMKchjbOVchjbMKchkbOVchlbMKaaaaaaaaaaaaaaaaafcihciichncijcikcilcimcincdjcdmcdncdncdncdocdncdncdnbABabtcvEcvEaagaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaabjocipbjobjociqbZabjobjobXkbXkbjobjobsecircischBcitciucivchBaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaafaaaaaaaaaaaaaagbBcbBcbBcciwbGnbBcciwbHNchGcixciycizciyciAchGaaabBcbQDbGnciBchIceKciCciCciDceKciEciFciGciHceSciIciJciKciLciLccUciMciNciOciPciQciRciSciTciUceKbMKchYchZciabMKcibciccidbMKciecifcigbMKaaaaaaaaaaaaaaaaaacdjcjccjdcjecjfcvecjhcjicdjcedcwlcefcegcehccBccBccBbzicwmcjWcwmaagaaaaaaaafaaabXkbXkbXkbjobjobjobjobjobjocjkbBRbjocjlcjmcjnceocjncjncjncjncjocjpcjqchBcjrcjscjtchBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaabZXchEbZZaafbZXchEbZZaafbZXchEbZZaaaaafaafaafaaaaaaaaaaagcjucjvcjubGnbGnceFbGnbZechGcjwcjxcjycjzcjAchGaaabBccaXbGnciBchIceKciCciCciDceKcjBcgccjCcjDcjEcjFcjCcgccjCcjCcgccjGcjHcjIciIcjJcjKcjLceScjMceKbMKciVciWciVbMKciXciYciXbMKciZcjacjbbMKaafaafaafaafcnDaafcdjcdjcdjcjQcjRcjScvfcjUcjRcedcwnccBcffcfgcfhcficcBcwoabtcvEcvEaagaafaafaafaaabXkckFcwpbjobsecwqcwrclKbjocjXbsebjocjYbmhbmhcjZbmhbmibmibmickackackbchBckcckdckechBaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaafbZXchEbZZaaabZXchEbZZaaabZXchEbZZaafaafaaaaafaafaaaaaaaagbBcbBcbBcbBcbGnbBcbBcbBcchGckfckgckhckickfchGaafbBcceKckjckkcklceKciCciDciDceKckmcknckockpceSckqckrcksckrckrcktckuckvckwckxckyckyckyckzckAceKbMKciVcjNciVbMKciXcjOciXbMKcjbcjPcjbbMKaaaaaaaafaafaaaaaaaaaaaaaaackBcjRbFkckDcuScjRbzicwscgycgzcgAcgBbDZcwtcgDabtaaaaaaaaaaaaaaaaafaaabXkcwucwvbWwbseccKbsebsebWwcgEbsebjobjobjobjobjobsebjoaafaaaaaaaaaaafckGckGckHckGckGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqaaabZXckIbZZaaabZXckIbZZaaabZXckIbZZaaaabfaaaaaaaafaafaaaaaaaaaaaaaaabJYbGnbJYaaaaaachGccNckKckLckMckNchGchGchGceKckOckkckPceKceKceKceKceKckQceRckRciHceSceRceRceRckSckTckUceSceSciHceRckVceRceRckWckXceKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKbMKaaaaafaafaaaaaaaaaaaaaaaaaackYcjRcjScvgcjUcjRbyecwwbFMchvchwbFMchxbyebyeabtaaaaaaaaaaaaaaaaafaaabXkckFcwxbjoclKbsebsecwybjoclabsebsebsebsebsebsebsebjoaafaaaaaaaaaaafaaackGclbckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaabfaaaaaaaaaaafaafaaaaaaaaaaaabJYbGnbJYaaaaaachGclccldcleclfclgclhclicljclhclkcllclmclncloclpclqclrclschLcqqcluclvclwclxclyclzclyclzclAclBclCchLchLclDchLclEcviceKceKceKceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaackYcjRclGclHclIclJaafbyecczciobNPbNPbyebyeaaaaafaaaaaaaaaaaaaaaaafaafbXkbXkbXkbjobjobjobsebjobjocipbjobjoclKclLbLebMdbjobjoaafaaaaaaaaaaafaaackGckHckGaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccuOcuLcuLcuNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabjocwvcwzbjocmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcuGcuJcuIcuHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaabjocwvcwqbjocnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBccwAbBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccuKcuLcuLcuMaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabXkcwBbXkbXkcnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabqabfabfabfabfabfabfabfabfabfaaaaaaaaaaaaaafaafaaaaaaaafbJYbGnbJYaafaafchGclMclNclOclPclQclRclSclTclRclUclVclWclXclYclZcmaclZcmbcmccmdcmecmfcmgcmhcmicmjcmkcmjcmlcmmcmnchPcmecmochPcmpcmqchPcmrceRcmsceKcmtcgccuOcuLcuLcuNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYcjRcjRcmvcjRcjRaaaaafaaackYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabjocwvcwzbjocmwaafbjobjobXkbXkbjobjoaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJYbGnbJYaaaaaachGcmycmzcmAcmBcmCchGcmDcmEchGcmFceRcmGciHceScmHcjCcmIciIcmJcmKcmLcmLcmLcmMcmNcmOcmPcmQcmRcmMcmScmSckUceRckVciIcmTcmUcmVchLcmWcmXcgUcmXcuGcuJcuIcuHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackYaagcjRcmZcjRcnaaafaafaaacwAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaeaaaaaabjocwvcwqbjocnbaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacmxaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbBcbBccwBbBcbBcaaachGcnccndcnechGchGchGchGchGceKcnfceRcmGcngcnhcnicjCcnjciIcnkcnlcnmcnncnoceKcnpcnqcnrcnscntceKcnucnvcnvcnlcnkciIcnwcnxceSceRcnyceKcnzcgccuKcuLcuLcuMaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacfDaagcnBcnCcnBaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabXkcwCbXkbXkcnDaafaaaaafaaaaaaaafaaaabfabfabfabqaafaafaafaafcmxaafaafaafaafaafabqabfabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbBccgPbGncnEbBcaafchGchGchGchGchGaafaaaaaaaafceKcnFceRcnGcnHcnHcnIcgccgccnJceKcnKcnLcnLcnLceKcnMcnNcnOcnPcnQceKcnLcnLcnLcnKceKcnJcgccnRceSceRceKceKcgccgccgccgcceKaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaafaagaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabXkbsebXkaaaaaaaaaaaaaafaaaaaaaafaaaabfaaaaaaaafaaaaafaaaaaacnSaaaaaaaafaaaaafaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabXkcwCbXkaaaaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcnTcnUcnVbBcaafaaaaaaaafaaaaaaaafaaaaaaaafceKcnWcnXciIcnYcnZcoacgccobcocceKcodcoecofcoecogcohcoicojcokcnQcogcoecoecoecolceKcomconckkceScoochWcopceRcoqcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabXkcwDbXkaaaaaaaaaaaaaafaaaaaaaafaaaabfaafcorcorcorcorcoraaacosaaacorcorcorcorcoraafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYcotcoubHMbBccgcccOccOccOccOccOccOccOccOcgcceKcowcoxcoycozcowceKceKceKcnJceKceKcogcogcogcogcoAcoBcoCcoBcoDcogcogcogcogceKceKcnJceKckkcoEcoFcoGcoHceRcoIcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaabfaaacoJcoKcoKcoKcoKcoLcoscoMcoNcoNcoNcoNcoOaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJYbJYbJYbJYbBcaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcoPcoQcoRaaaaaaaaacogcogcogcogcogcogcogcogcogaaaaaaaaacoScoTcoUcoVcoWclyclycoXcoYcoZcogaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaabfacfcpacpacpacpacpaaaacosaaacpacpacpacpacpaaafabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceKcpbcpccpcaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaacpccpdcpbceKcpecpfceKcgccgccpgcgcaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaabfaaaaaaaaaaafaaaaaaaaacosaaaaaaaaaaafaaaaaaaaaabfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From 695b550ed9c8376f699590651c6ec382ed952404 Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 21 Jul 2015 15:27:18 +0200 Subject: [PATCH 52/65] Fixes thrown things being stuck in space because the direction step was using the target's loc. --- code/game/atoms_movable.dm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 8a24343e0bb..30108fcd62a 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -186,9 +186,10 @@ dx = dy dy = olddx - var/error = dist_x/2 - dist_y + var/error = dist_x/2 - dist_y //used to decide whether our next move should be forward or diagonal. var/atom/finalturf = get_turf(target) var/hit = 0 + var/init_dir = get_dir(src, target) while(target && ((dist_travelled < range && loc != finalturf) || !has_gravity(src))) //stop if we reached our destination (or max range) and aren't floating @@ -196,9 +197,14 @@ hit = 1 break - var/atom/step = get_step(src, get_dir(src, target)) + var/atom/step + if(dist_travelled < max(dist_x, dist_y)) //if we haven't reached the target yet we home in on it, otherwise we use the initial direction + step = get_step(src, get_dir(src, finalturf)) + else + step = get_step(src, init_dir) + if(!pure_diagonal && !diagonals_first) // not a purely diagonal trajectory and we don't want all diagonal moves to be done first - if(error >= 0 && get_dist(src, finalturf) > 1) + if(error >= 0 && max(dist_x,dist_y) - dist_travelled != 1) //we do a step forward unless we're right before the target step = get_step(src, dx) error += (error < 0) ? dist_x/2 : -dist_y if(!step) // going off the edge of the map makes get_step return null, don't let things go off the edge @@ -234,6 +240,7 @@ if(AM == src) continue if(AM.density && !(AM.pass_flags & LETPASSTHROW) && !(AM.flags & ON_BORDER)) + throwing = 0 throw_impact(AM) return 1 From c900894030ef8a238a811e15e7b489db77e486ae Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 21 Jul 2015 18:12:31 +0200 Subject: [PATCH 53/65] Gives the Military Jacket some suit storage options. It can hold all the minor items that the bomber jacket can, as well as the 10mm pistol, the .357 revolver, and the .38 Made the military jacket into an actual jacket. --- code/game/gamemodes/gang/gang_datum.dm | 2 +- code/game/machinery/vending.dm | 4 ++-- code/modules/clothing/suits/miscellaneous.dm | 12 +++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 99fce43f8e6..f7c4d935b64 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -90,7 +90,7 @@ if("Leather Overcoats") outfit_path = /obj/item/clothing/suit/jacket/leather/overcoat if("Military Jackets") - outfit_path = /obj/item/clothing/suit/miljacket + outfit_path = /obj/item/clothing/suit/jacket/miljacket if("Soviet Uniforms") outfit_path = /obj/item/clothing/under/soviet if("Tactical Turtlenecks") diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ba110550f4e..7d973cbe5a6 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -855,7 +855,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/mask/fakemoustache = 1,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,/obj/item/clothing/head/plaguedoctorhat = 1,/obj/item/clothing/mask/gas/plaguedoctor = 1, /obj/item/clothing/suit/toggle/owlwings = 1, /obj/item/clothing/under/owl = 1,/obj/item/clothing/mask/gas/owl_mask = 1, /obj/item/clothing/suit/toggle/owlwings/griffinwings = 1, /obj/item/clothing/under/griffin = 1, /obj/item/clothing/shoes/griffin = 1, /obj/item/clothing/head/griffin = 1, - /obj/item/clothing/suit/apron = 1,/obj/item/clothing/under/waiter = 1,/obj/item/clothing/suit/miljacket = 1, + /obj/item/clothing/suit/apron = 1,/obj/item/clothing/under/waiter = 1,/obj/item/clothing/suit/jacket/miljacket = 1, /obj/item/clothing/under/pirate = 1,/obj/item/clothing/suit/pirate = 1,/obj/item/clothing/head/pirate = 1,/obj/item/clothing/head/bandana = 1, /obj/item/clothing/head/bandana = 1,/obj/item/clothing/under/soviet = 1,/obj/item/clothing/head/ushanka = 1,/obj/item/clothing/suit/imperium_monk = 1, /obj/item/clothing/mask/gas/cyborg = 1,/obj/item/clothing/suit/holidaypriest = 1,/obj/item/clothing/head/wizard/marisa/fake = 1, @@ -950,7 +950,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/under/sl_suit=1,/obj/item/clothing/under/pants/jeans=3,/obj/item/clothing/under/pants/classicjeans=2, /obj/item/clothing/under/pants/camo = 1,/obj/item/clothing/under/pants/blackjeans=2,/obj/item/clothing/under/pants/khaki=2, /obj/item/clothing/under/pants/white=2,/obj/item/clothing/under/pants/red=1,/obj/item/clothing/under/pants/black=2, - /obj/item/clothing/under/pants/tan=2,/obj/item/clothing/under/pants/track=1,/obj/item/clothing/suit/miljacket = 1, + /obj/item/clothing/under/pants/tan=2,/obj/item/clothing/under/pants/track=1,/obj/item/clothing/suit/jacket/miljacket = 1, /obj/item/clothing/tie/blue=1, /obj/item/clothing/tie/red=1, /obj/item/clothing/tie/black=1, /obj/item/clothing/tie/horrible=1, /obj/item/clothing/tie/scarf/red=1,/obj/item/clothing/tie/scarf/green=1,/obj/item/clothing/tie/scarf/darkblue=1, /obj/item/clothing/tie/scarf/purple=1,/obj/item/clothing/tie/scarf/yellow=1,/obj/item/clothing/tie/scarf/orange=1, diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 015e70defc7..c3baa3deb8d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -264,6 +264,13 @@ cold_protection = CHEST|GROIN armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0) +/obj/item/clothing/suit/jacket/miljacket + name = "military jacket" + desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." + icon_state = "militaryjacket" + item_state = "militaryjacket" + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/weapon/gun/projectile/automatic/pistol,/obj/item/weapon/gun/projectile/revolver,/obj/item/weapon/gun/projectile/revolver/detective) + /obj/item/clothing/suit/xenos name = "xenos suit" desc = "A suit made out of chitinous alien hide." @@ -347,8 +354,3 @@ allowed = list(/obj/item/weapon/pickaxe,/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) -/obj/item/clothing/suit/miljacket - name = "military jacket" - desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." - icon_state = "militaryjacket" - item_state = "militaryjacket" From d1dec3ffecae9b707d97f37b8d029ec02979d083 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Tue, 21 Jul 2015 12:20:15 -0500 Subject: [PATCH 54/65] Changed on phil's comments --- code/game/objects/structures/statues.dm | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 10e5d804c56..f58f8fbce8c 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -199,16 +199,20 @@ /obj/structure/statue/plasma/bullet_act(obj/item/projectile/Proj) + var/burn = FALSE if(istype(Proj,/obj/item/projectile/beam)) PlasmaBurn(2500) + burn = TRUE else if(istype(Proj,/obj/item/projectile/ion)) PlasmaBurn(500) - if(Proj.firer) - message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") - else - message_admins("Plasma statue ignited by [Proj]. No known firer.(?) (FLW) in ([x],[y],[z] - JMP)",0,1) - log_game("Plasma statue ignited by [Proj] in ([x],[y],[z]). No known firer.") + burn = TRUE + if(burn) + if(Proj.firer) + message_admins("Plasma statue ignited by [key_name_admin(Proj.firer)](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + log_game("Plasma statue ignited by [key_name(Proj.firer)] in ([x],[y],[z])") + else + message_admins("Plasma statue ignited by [Proj]. No known firer.(?) (FLW) in ([x],[y],[z] - JMP)",0,1) + log_game("Plasma statue ignited by [Proj] in ([x],[y],[z]). No known firer.") ..() /obj/structure/statue/plasma/attackby(obj/item/weapon/W, mob/user, params) From af04cfa0b7ccbac43aa485716c91ad1aebcd1401 Mon Sep 17 00:00:00 2001 From: Incoming5643 Date: Tue, 21 Jul 2015 14:54:35 -0400 Subject: [PATCH 55/65] I almost got through a PR without any follow up commits but I'm using the web interface so I must be pretty cocky --- code/modules/admin/admin.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 8f57064f66d..71e35f2ff89 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -221,21 +221,21 @@ var/global/floorIsLava = 0 if(6) dat+="ERROR: Could not submit Feed story to Network.

          " if(src.admincaster_feed_channel.channel_name=="") - dat+="•Invalid receiving 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+="•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.
          " + dat+="•Invalid channel name.
          " var/check = 0 for(var/datum/newscaster/feed_channel/FC in 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+="•Channel name already in use.
          " dat+="
          Return
          " if(9) dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
          " @@ -336,9 +336,9 @@ var/global/floorIsLava = 0 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.
          " + dat+="•Invalid name for person wanted.
          " if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]") - dat+="•Invalid description.
          " + dat+="•Invalid description.
          " dat+="
          Return
          " if(17) dat+="Wanted Issue successfully deleted from Circulation
          " @@ -406,7 +406,7 @@ var/global/floorIsLava = 0 /datum/admins/proc/restart() set category = "Server" - set name = "Restart" + set name = "Hard Restart" set desc="Restarts the world immediately" if (!usr.client.holder) return @@ -804,4 +804,4 @@ var/global/floorIsLava = 0 tomob.ckey = frommob.ckey qdel(frommob) - return 1 \ No newline at end of file + return 1 From 319e9cc22409c5c464e56c36d1c7db5b1c7e2440 Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 21 Jul 2015 22:14:36 +0200 Subject: [PATCH 56/65] Fixes runtime with mech/attack_animal's add_logs() Readds mech cabin air being dropped on the turf when the mech is destroyed. Fixes turf not updating its air when a mech dropped air on it (either via gas tank leak or cabin air dump). --- code/game/mecha/mecha.dm | 7 ++++++- code/game/mecha/mecha_defense.dm | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 6d9f0eef8b0..182c5f3005b 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -133,7 +133,11 @@ equipment.Cut() cell = null internal_tank = null - qdel(cabin_air) + if(loc) + loc.assume_air(cabin_air) + air_update_turf() + else + del(cabin_air) cabin_air = null qdel(spark_system) spark_system = null @@ -234,6 +238,7 @@ var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) if(loc) loc.assume_air(leaked_gas) + air_update_turf() else del(leaked_gas) diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index e6d498dd0f4..b379692d619 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -71,12 +71,12 @@ take_damage(damage) check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) visible_message("[user] [user.attacktext] [src]!") - add_logs(user, src, "attacked", admin=0) + add_logs(user, src, "attacked") else src.log_append_to_last("Armor saved.") playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) visible_message("The [user] rebounds off [src.name]'s armor!") - add_logs(user, src, "attacked", admin=0) + add_logs(user, src, "attacked") return /obj/mecha/attack_tk() From 42ca7764a11dd3470f6341eac9e4519578234bbb Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 21 Jul 2015 20:25:21 +0000 Subject: [PATCH 57/65] Automatic changelog compile --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/Xhuis-Firelocks.yml | 6 ------ 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 html/changelogs/Xhuis-Firelocks.yml diff --git a/html/changelog.html b/html/changelog.html index 6bd224a07fc..c71fef2dfb1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -60,6 +60,10 @@
          • Syndicate Donksoft gear now costs less.
          +

          Xhuis updated:

          +
            +
          • Firelocks may now be constructed and deconstructed with standard tools. Circuit boards can be produced at a standard autolathe.
          • +

          phil235 updated: