mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
- Added a sprite "7" to the sd lighting file as it was used, even if it didn't exist.
- Piped 3.0.0 a bit. - Standardized code/modules/power. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4242 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -15,27 +15,27 @@
|
|||||||
var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things
|
var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/item/weapon/am_containment/ex_act(severity)
|
||||||
switch(severity)
|
switch(severity)
|
||||||
if(1.0)
|
if(1.0)
|
||||||
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
|
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
|
||||||
|
if(src)
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
if(2.0)
|
||||||
|
if(prob((fuel/10)-stability))
|
||||||
|
explosion(get_turf(src), 1, 2, 3, 5)
|
||||||
if(src)
|
if(src)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(2.0)
|
stability -= 40
|
||||||
if(prob((fuel/10)-stability))
|
if(3.0)
|
||||||
explosion(get_turf(src), 1, 2, 3, 5)
|
stability -= 20
|
||||||
if(src)
|
//check_stability()
|
||||||
del(src)
|
return
|
||||||
return
|
|
||||||
stability -= 40
|
|
||||||
if(3.0)
|
|
||||||
stability -= 20
|
|
||||||
//check_stability()
|
|
||||||
return
|
|
||||||
|
|
||||||
proc/usefuel(var/wanted)
|
/obj/item/weapon/am_containment/proc/usefuel(var/wanted)
|
||||||
if(fuel < wanted)
|
if(fuel < wanted)
|
||||||
wanted = fuel
|
wanted = fuel
|
||||||
fuel -= wanted
|
fuel -= wanted
|
||||||
return wanted
|
return wanted
|
||||||
@@ -29,311 +29,311 @@
|
|||||||
var/stored_power = 0//Power to deploy per tick
|
var/stored_power = 0//Power to deploy per tick
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/am_control_unit/New()
|
||||||
..()
|
..()
|
||||||
linked_shielding = list()
|
linked_shielding = list()
|
||||||
linked_cores = list()
|
linked_cores = list()
|
||||||
|
|
||||||
|
|
||||||
Del()//Perhaps damage and run stability checks rather than just del on the others
|
/obj/machinery/power/am_control_unit/Del()//Perhaps damage and run stability checks rather than just del on the others
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||||
|
del(AMS)
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/process()
|
||||||
|
if(exploding)
|
||||||
|
explosion(get_turf(src),8,12,18,12)
|
||||||
|
if(src) del(src)
|
||||||
|
|
||||||
|
if(update_shield_icons && !shield_icon_delay)
|
||||||
|
check_shield_icons()
|
||||||
|
update_shield_icons = 0
|
||||||
|
|
||||||
|
if(stat & (NOPOWER|BROKEN) || !active)//can update the icons even without power
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!fueljar)//No fuel but we are on, shutdown
|
||||||
|
toggle_power()
|
||||||
|
//Angry buzz or such here
|
||||||
|
return
|
||||||
|
|
||||||
|
add_avail(stored_power)
|
||||||
|
|
||||||
|
power_cycle++
|
||||||
|
if(power_cycle >= power_cycle_delay)
|
||||||
|
produce_power()
|
||||||
|
power_cycle = 0
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/produce_power()
|
||||||
|
playsound(src.loc, 'bang.ogg', 25, 1)
|
||||||
|
var/core_power = reported_core_efficiency//Effectively how much fuel we can safely deal with
|
||||||
|
if(core_power <= 0) return 0//Something is wrong
|
||||||
|
var/core_damage = 0
|
||||||
|
var/fuel = fueljar.usefuel(fuel_injection)
|
||||||
|
|
||||||
|
stored_power = (fuel/core_power)*fuel*200000
|
||||||
|
//Now check if the cores could deal with it safely, this is done after so you can overload for more power if needed, still a bad idea
|
||||||
|
if(fuel > (2*core_power))//More fuel has been put in than the current cores can deal with
|
||||||
|
if(prob(50))core_damage = 1//Small chance of damage
|
||||||
|
if((fuel-core_power) > 5) core_damage = 5//Now its really starting to overload the cores
|
||||||
|
if((fuel-core_power) > 10) core_damage = 20//Welp now you did it, they wont stand much of this
|
||||||
|
if(core_damage == 0) return
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||||
|
AMS.stability -= core_damage
|
||||||
|
AMS.check_stability(1)
|
||||||
|
playsound(src.loc, 'bang.ogg', 50, 1)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/emp_act(severity)
|
||||||
|
switch(severity)
|
||||||
|
if(1)
|
||||||
|
if(active) toggle_power()
|
||||||
|
stability -= rand(15,30)
|
||||||
|
if(2)
|
||||||
|
if(active) toggle_power()
|
||||||
|
stability -= rand(10,20)
|
||||||
|
..()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/blob_act()
|
||||||
|
stability -= 20
|
||||||
|
if(prob(100-stability))//Might infect the rest of the machine
|
||||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||||
del(AMS)
|
AMS.blob_act()
|
||||||
..()
|
spawn(0)
|
||||||
|
//Likely explode
|
||||||
|
|
||||||
process()
|
|
||||||
if(exploding)
|
|
||||||
explosion(get_turf(src),8,12,18,12)
|
|
||||||
if(src) del(src)
|
|
||||||
|
|
||||||
if(update_shield_icons && !shield_icon_delay)
|
|
||||||
check_shield_icons()
|
|
||||||
update_shield_icons = 0
|
|
||||||
|
|
||||||
if(stat & (NOPOWER|BROKEN) || !active)//can update the icons even without power
|
|
||||||
return
|
|
||||||
|
|
||||||
if(!fueljar)//No fuel but we are on, shutdown
|
|
||||||
toggle_power()
|
|
||||||
//Angry buzz or such here
|
|
||||||
return
|
|
||||||
|
|
||||||
add_avail(stored_power)
|
|
||||||
|
|
||||||
power_cycle++
|
|
||||||
if(power_cycle >= power_cycle_delay)
|
|
||||||
produce_power()
|
|
||||||
power_cycle = 0
|
|
||||||
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/produce_power()
|
|
||||||
playsound(src.loc, 'bang.ogg', 25, 1)
|
|
||||||
var/core_power = reported_core_efficiency//Effectively how much fuel we can safely deal with
|
|
||||||
if(core_power <= 0) return 0//Something is wrong
|
|
||||||
var/core_damage = 0
|
|
||||||
var/fuel = fueljar.usefuel(fuel_injection)
|
|
||||||
|
|
||||||
stored_power = (fuel/core_power)*fuel*200000
|
|
||||||
//Now check if the cores could deal with it safely, this is done after so you can overload for more power if needed, still a bad idea
|
|
||||||
if(fuel > (2*core_power))//More fuel has been put in than the current cores can deal with
|
|
||||||
if(prob(50))core_damage = 1//Small chance of damage
|
|
||||||
if((fuel-core_power) > 5) core_damage = 5//Now its really starting to overload the cores
|
|
||||||
if((fuel-core_power) > 10) core_damage = 20//Welp now you did it, they wont stand much of this
|
|
||||||
if(core_damage == 0) return
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
|
||||||
AMS.stability -= core_damage
|
|
||||||
AMS.check_stability(1)
|
|
||||||
playsound(src.loc, 'bang.ogg', 50, 1)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
emp_act(severity)
|
|
||||||
switch(severity)
|
|
||||||
if(1)
|
|
||||||
if(active) toggle_power()
|
|
||||||
stability -= rand(15,30)
|
|
||||||
if(2)
|
|
||||||
if(active) toggle_power()
|
|
||||||
stability -= rand(10,20)
|
|
||||||
..()
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
|
||||||
stability -= 20
|
|
||||||
if(prob(100-stability))//Might infect the rest of the machine
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
|
||||||
AMS.blob_act()
|
|
||||||
spawn(0)
|
|
||||||
//Likely explode
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
check_stability()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
|
||||||
switch(severity)
|
|
||||||
if(1.0)
|
|
||||||
stability -= 60
|
|
||||||
if(2.0)
|
|
||||||
stability -= 40
|
|
||||||
if(3.0)
|
|
||||||
stability -= 20
|
|
||||||
check_stability()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
bullet_act(var/obj/item/projectile/Proj)
|
|
||||||
if(Proj.flag != "bullet")
|
|
||||||
stability -= Proj.force
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
power_change()
|
|
||||||
..()
|
|
||||||
if(stat & NOPOWER && active)
|
|
||||||
toggle_power()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
update_icon()
|
|
||||||
if(active) icon_state = "control_on"
|
|
||||||
else icon_state = "control"
|
|
||||||
//No other icons for it atm
|
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/W, mob/user)
|
|
||||||
if(!istype(W) || !user) return
|
|
||||||
if(istype(W, /obj/item/weapon/wrench))
|
|
||||||
if(!anchored)
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
|
||||||
"You secure the anchor bolts to the floor.", \
|
|
||||||
"You hear a ratchet")
|
|
||||||
src.anchored = 1
|
|
||||||
connect_to_network()
|
|
||||||
else if(!linked_shielding.len > 0)
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
user.visible_message("[user.name] unsecures the [src.name].", \
|
|
||||||
"You remove the anchor bolts.", \
|
|
||||||
"You hear a ratchet")
|
|
||||||
src.anchored = 0
|
|
||||||
disconnect_from_network()
|
|
||||||
else
|
|
||||||
user << "\red Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!"
|
|
||||||
return
|
|
||||||
|
|
||||||
if(istype(W, /obj/item/weapon/am_containment))
|
|
||||||
if(fueljar)
|
|
||||||
user << "\red There is already a [fueljar] inside!"
|
|
||||||
return
|
|
||||||
fueljar = W
|
|
||||||
W.loc = src
|
|
||||||
if(user.client)
|
|
||||||
user.client.screen -= W
|
|
||||||
user.u_equip(W)
|
|
||||||
user.update_icons()
|
|
||||||
user.visible_message("[user.name] loads an [W.name] into the [src.name].", \
|
|
||||||
"You load an [W.name].", \
|
|
||||||
"You hear a thunk.")
|
|
||||||
return
|
|
||||||
|
|
||||||
if(W.force >= 20)
|
|
||||||
stability -= W.force/2
|
|
||||||
check_stability()
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
|
||||||
if(anchored)
|
|
||||||
interact(user)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/add_shielding(var/obj/machinery/am_shielding/AMS, var/AMS_linking = 0)
|
|
||||||
if(!istype(AMS)) return 0
|
|
||||||
if(!anchored) return 0
|
|
||||||
if(!AMS_linking && !AMS.link_control(src)) return 0
|
|
||||||
linked_shielding.Add(AMS)
|
|
||||||
update_shield_icons = 1
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
proc/remove_shielding(var/obj/machinery/am_shielding/AMS)
|
|
||||||
if(!istype(AMS)) return 0
|
|
||||||
linked_shielding.Remove(AMS)
|
|
||||||
update_shield_icons = 2
|
|
||||||
if(active) toggle_power()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
proc/check_stability()//TODO: make it break when low also might want to add a way to fix it like a part or such that can be replaced
|
|
||||||
if(stability <= 0)
|
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
check_stability()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
proc/toggle_power()
|
/obj/machinery/power/am_control_unit/ex_act(severity)
|
||||||
active = !active
|
switch(severity)
|
||||||
if(active)
|
if(1.0)
|
||||||
use_power = 2
|
stability -= 60
|
||||||
visible_message("The [src.name] starts up.")
|
if(2.0)
|
||||||
|
stability -= 40
|
||||||
|
if(3.0)
|
||||||
|
stability -= 20
|
||||||
|
check_stability()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/bullet_act(var/obj/item/projectile/Proj)
|
||||||
|
if(Proj.flag != "bullet")
|
||||||
|
stability -= Proj.force
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/power_change()
|
||||||
|
..()
|
||||||
|
if(stat & NOPOWER && active)
|
||||||
|
toggle_power()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/update_icon()
|
||||||
|
if(active) icon_state = "control_on"
|
||||||
|
else icon_state = "control"
|
||||||
|
//No other icons for it atm
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/attackby(obj/item/W, mob/user)
|
||||||
|
if(!istype(W) || !user) return
|
||||||
|
if(istype(W, /obj/item/weapon/wrench))
|
||||||
|
if(!anchored)
|
||||||
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
|
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
||||||
|
"You secure the anchor bolts to the floor.", \
|
||||||
|
"You hear a ratchet")
|
||||||
|
src.anchored = 1
|
||||||
|
connect_to_network()
|
||||||
|
else if(!linked_shielding.len > 0)
|
||||||
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
|
user.visible_message("[user.name] unsecures the [src.name].", \
|
||||||
|
"You remove the anchor bolts.", \
|
||||||
|
"You hear a ratchet")
|
||||||
|
src.anchored = 0
|
||||||
|
disconnect_from_network()
|
||||||
else
|
else
|
||||||
use_power = 1
|
user << "\red Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!"
|
||||||
visible_message("The [src.name] shuts down.")
|
|
||||||
update_icon()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(istype(W, /obj/item/weapon/am_containment))
|
||||||
proc/check_shield_icons()//Forces icon_update for all shields
|
if(fueljar)
|
||||||
if(shield_icon_delay) return
|
user << "\red There is already a [fueljar] inside!"
|
||||||
shield_icon_delay = 1
|
|
||||||
if(update_shield_icons == 2)//2 means to clear everything and rebuild
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
|
||||||
if(AMS.processing) AMS.shutdown_core()
|
|
||||||
AMS.control_unit = null
|
|
||||||
spawn(10)
|
|
||||||
AMS.controllerscan()
|
|
||||||
linked_shielding = list()
|
|
||||||
|
|
||||||
else
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
|
||||||
AMS.update_icon()
|
|
||||||
spawn(20)
|
|
||||||
shield_icon_delay = 0
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/check_core_stability()
|
|
||||||
if(stored_core_stability_delay || linked_cores.len <= 0) return
|
|
||||||
stored_core_stability_delay = 1
|
|
||||||
stored_core_stability = 0
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
|
||||||
stored_core_stability += AMS.stability
|
|
||||||
stored_core_stability/=linked_cores.len
|
|
||||||
spawn(40)
|
|
||||||
stored_core_stability_delay = 0
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/interact(mob/user)
|
|
||||||
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
|
||||||
if(!istype(user, /mob/living/silicon/ai))
|
|
||||||
user.machine = null
|
|
||||||
user << browse(null, "window=AMcontrol")
|
|
||||||
return
|
|
||||||
user.machine = src
|
|
||||||
|
|
||||||
var/dat = ""
|
|
||||||
dat += "AntiMatter Control Panel<BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh</A><BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];refreshicons=1'>Force Shielding Update</A><BR><BR>"
|
|
||||||
dat += "Status: [(active?"Injecting":"Standby")] <BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];togglestatus=1'>Toggle Status</A><BR>"
|
|
||||||
|
|
||||||
dat += "Stability: [stability]%<BR>"
|
|
||||||
dat += "Reactor parts: [linked_shielding.len]<BR>"//TODO: perhaps add some sort of stability check
|
|
||||||
dat += "Cores: [linked_cores.len]<BR><BR>"
|
|
||||||
dat += "-Current Efficiency: [reported_core_efficiency]<BR>"
|
|
||||||
dat += "-Average Stability: [stored_core_stability] <A href='?src=\ref[src];refreshstability=1'>(update)</A><BR>"
|
|
||||||
dat += "Last Produced: [stored_power]<BR>"
|
|
||||||
|
|
||||||
dat += "Fuel: "
|
|
||||||
if(!fueljar)
|
|
||||||
dat += "<BR>No fuel receptacle detected."
|
|
||||||
else
|
|
||||||
dat += "<A href='?src=\ref[src];ejectjar=1'>Eject</A><BR>"
|
|
||||||
dat += "- [fueljar.fuel]/[fueljar.fuel_max] Units<BR>"
|
|
||||||
|
|
||||||
dat += "- Injecting: [fuel_injection] units<BR>"
|
|
||||||
dat += "- <A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
|
||||||
|
|
||||||
|
|
||||||
user << browse(dat, "window=AMcontrol;size=420x500")
|
|
||||||
onclose(user, "AMcontrol")
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Topic(href, href_list)
|
|
||||||
..()
|
|
||||||
//Ignore input if we are broken or guy is not touching us, AI can control from a ways away
|
|
||||||
if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon/ai)))
|
|
||||||
usr.machine = null
|
|
||||||
usr << browse(null, "window=AMcontrol")
|
|
||||||
return
|
return
|
||||||
|
fueljar = W
|
||||||
if(href_list["close"])
|
W.loc = src
|
||||||
usr << browse(null, "window=AMcontrol")
|
if(user.client)
|
||||||
usr.machine = null
|
user.client.screen -= W
|
||||||
return
|
user.u_equip(W)
|
||||||
|
user.update_icons()
|
||||||
if(href_list["togglestatus"])
|
user.visible_message("[user.name] loads an [W.name] into the [src.name].", \
|
||||||
toggle_power()
|
"You load an [W.name].", \
|
||||||
|
"You hear a thunk.")
|
||||||
if(href_list["refreshicons"])
|
|
||||||
update_shield_icons = 1
|
|
||||||
|
|
||||||
if(href_list["ejectjar"])
|
|
||||||
if(fueljar)
|
|
||||||
fueljar.loc = src.loc
|
|
||||||
fueljar = null
|
|
||||||
//fueljar.control_unit = null currently it does not care where it is
|
|
||||||
//update_icon() when we have the icon for it
|
|
||||||
|
|
||||||
if(href_list["strengthup"])
|
|
||||||
fuel_injection++
|
|
||||||
|
|
||||||
if(href_list["strengthdown"])
|
|
||||||
fuel_injection--
|
|
||||||
if(fuel_injection < 0) fuel_injection = 0
|
|
||||||
|
|
||||||
if(href_list["refreshstability"])
|
|
||||||
check_core_stability()
|
|
||||||
|
|
||||||
updateDialog()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(W.force >= 20)
|
||||||
|
stability -= W.force/2
|
||||||
|
check_stability()
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/attack_hand(mob/user as mob)
|
||||||
|
if(anchored)
|
||||||
|
interact(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/add_shielding(var/obj/machinery/am_shielding/AMS, var/AMS_linking = 0)
|
||||||
|
if(!istype(AMS)) return 0
|
||||||
|
if(!anchored) return 0
|
||||||
|
if(!AMS_linking && !AMS.link_control(src)) return 0
|
||||||
|
linked_shielding.Add(AMS)
|
||||||
|
update_shield_icons = 1
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/remove_shielding(var/obj/machinery/am_shielding/AMS)
|
||||||
|
if(!istype(AMS)) return 0
|
||||||
|
linked_shielding.Remove(AMS)
|
||||||
|
update_shield_icons = 2
|
||||||
|
if(active) toggle_power()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/check_stability()//TODO: make it break when low also might want to add a way to fix it like a part or such that can be replaced
|
||||||
|
if(stability <= 0)
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/toggle_power()
|
||||||
|
active = !active
|
||||||
|
if(active)
|
||||||
|
use_power = 2
|
||||||
|
visible_message("The [src.name] starts up.")
|
||||||
|
else
|
||||||
|
use_power = 1
|
||||||
|
visible_message("The [src.name] shuts down.")
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/check_shield_icons()//Forces icon_update for all shields
|
||||||
|
if(shield_icon_delay) return
|
||||||
|
shield_icon_delay = 1
|
||||||
|
if(update_shield_icons == 2)//2 means to clear everything and rebuild
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||||
|
if(AMS.processing) AMS.shutdown_core()
|
||||||
|
AMS.control_unit = null
|
||||||
|
spawn(10)
|
||||||
|
AMS.controllerscan()
|
||||||
|
linked_shielding = list()
|
||||||
|
|
||||||
|
else
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||||
|
AMS.update_icon()
|
||||||
|
spawn(20)
|
||||||
|
shield_icon_delay = 0
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/check_core_stability()
|
||||||
|
if(stored_core_stability_delay || linked_cores.len <= 0) return
|
||||||
|
stored_core_stability_delay = 1
|
||||||
|
stored_core_stability = 0
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||||
|
stored_core_stability += AMS.stability
|
||||||
|
stored_core_stability/=linked_cores.len
|
||||||
|
spawn(40)
|
||||||
|
stored_core_stability_delay = 0
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/proc/interact(mob/user)
|
||||||
|
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
||||||
|
if(!istype(user, /mob/living/silicon/ai))
|
||||||
|
user.machine = null
|
||||||
|
user << browse(null, "window=AMcontrol")
|
||||||
|
return
|
||||||
|
user.machine = src
|
||||||
|
|
||||||
|
var/dat = ""
|
||||||
|
dat += "AntiMatter Control Panel<BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];refresh=1'>Refresh</A><BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];refreshicons=1'>Force Shielding Update</A><BR><BR>"
|
||||||
|
dat += "Status: [(active?"Injecting":"Standby")] <BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];togglestatus=1'>Toggle Status</A><BR>"
|
||||||
|
|
||||||
|
dat += "Stability: [stability]%<BR>"
|
||||||
|
dat += "Reactor parts: [linked_shielding.len]<BR>"//TODO: perhaps add some sort of stability check
|
||||||
|
dat += "Cores: [linked_cores.len]<BR><BR>"
|
||||||
|
dat += "-Current Efficiency: [reported_core_efficiency]<BR>"
|
||||||
|
dat += "-Average Stability: [stored_core_stability] <A href='?src=\ref[src];refreshstability=1'>(update)</A><BR>"
|
||||||
|
dat += "Last Produced: [stored_power]<BR>"
|
||||||
|
|
||||||
|
dat += "Fuel: "
|
||||||
|
if(!fueljar)
|
||||||
|
dat += "<BR>No fuel receptacle detected."
|
||||||
|
else
|
||||||
|
dat += "<A href='?src=\ref[src];ejectjar=1'>Eject</A><BR>"
|
||||||
|
dat += "- [fueljar.fuel]/[fueljar.fuel_max] Units<BR>"
|
||||||
|
|
||||||
|
dat += "- Injecting: [fuel_injection] units<BR>"
|
||||||
|
dat += "- <A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
||||||
|
|
||||||
|
|
||||||
|
user << browse(dat, "window=AMcontrol;size=420x500")
|
||||||
|
onclose(user, "AMcontrol")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/am_control_unit/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
//Ignore input if we are broken or guy is not touching us, AI can control from a ways away
|
||||||
|
if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon/ai)))
|
||||||
|
usr.machine = null
|
||||||
|
usr << browse(null, "window=AMcontrol")
|
||||||
|
return
|
||||||
|
|
||||||
|
if(href_list["close"])
|
||||||
|
usr << browse(null, "window=AMcontrol")
|
||||||
|
usr.machine = null
|
||||||
|
return
|
||||||
|
|
||||||
|
if(href_list["togglestatus"])
|
||||||
|
toggle_power()
|
||||||
|
|
||||||
|
if(href_list["refreshicons"])
|
||||||
|
update_shield_icons = 1
|
||||||
|
|
||||||
|
if(href_list["ejectjar"])
|
||||||
|
if(fueljar)
|
||||||
|
fueljar.loc = src.loc
|
||||||
|
fueljar = null
|
||||||
|
//fueljar.control_unit = null currently it does not care where it is
|
||||||
|
//update_icon() when we have the icon for it
|
||||||
|
|
||||||
|
if(href_list["strengthup"])
|
||||||
|
fuel_injection++
|
||||||
|
|
||||||
|
if(href_list["strengthdown"])
|
||||||
|
fuel_injection--
|
||||||
|
if(fuel_injection < 0) fuel_injection = 0
|
||||||
|
|
||||||
|
if(href_list["refreshstability"])
|
||||||
|
check_core_stability()
|
||||||
|
|
||||||
|
updateDialog()
|
||||||
|
return
|
||||||
@@ -26,177 +26,177 @@ proc/cardinalrange(var/center)
|
|||||||
var/efficiency = 1//How many cores this core counts for when doing power processing, plasma in the air and stability could affect this
|
var/efficiency = 1//How many cores this core counts for when doing power processing, plasma in the air and stability could affect this
|
||||||
|
|
||||||
|
|
||||||
New(loc)
|
/obj/machinery/am_shielding/New(loc)
|
||||||
..(loc)
|
..(loc)
|
||||||
spawn(10)
|
spawn(10)
|
||||||
controllerscan()
|
controllerscan()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/proc/controllerscan(var/priorscan = 0)
|
||||||
|
//Make sure we are the only one here
|
||||||
|
if(!istype(src.loc, /turf))
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in loc.contents)
|
||||||
|
if(AMS == src) continue
|
||||||
|
spawn(0)
|
||||||
|
del(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
//Search for shielding first
|
||||||
|
for(var/obj/machinery/am_shielding/AMS in cardinalrange(src))
|
||||||
|
if(AMS && AMS.control_unit && link_control(AMS.control_unit))
|
||||||
|
break
|
||||||
|
|
||||||
proc/controllerscan(var/priorscan = 0)
|
if(!control_unit)//No other guys nearby look for a control unit
|
||||||
//Make sure we are the only one here
|
for(var/direction in cardinal)
|
||||||
if(!istype(src.loc, /turf))
|
for(var/obj/machinery/power/am_control_unit/AMC in cardinalrange(src))
|
||||||
del(src)
|
if(AMC.add_shielding(src))
|
||||||
return
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in loc.contents)
|
|
||||||
if(AMS == src) continue
|
|
||||||
spawn(0)
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
//Search for shielding first
|
|
||||||
for(var/obj/machinery/am_shielding/AMS in cardinalrange(src))
|
|
||||||
if(AMS && AMS.control_unit && link_control(AMS.control_unit))
|
|
||||||
break
|
break
|
||||||
|
|
||||||
if(!control_unit)//No other guys nearby look for a control unit
|
if(!control_unit)
|
||||||
for(var/direction in cardinal)
|
if(!priorscan)
|
||||||
for(var/obj/machinery/power/am_control_unit/AMC in cardinalrange(src))
|
spawn(20)
|
||||||
if(AMC.add_shielding(src))
|
controllerscan(1)//Last chance
|
||||||
break
|
|
||||||
|
|
||||||
if(!control_unit)
|
|
||||||
if(!priorscan)
|
|
||||||
spawn(20)
|
|
||||||
controllerscan(1)//Last chance
|
|
||||||
return
|
|
||||||
spawn(0)
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Del()
|
|
||||||
if(control_unit) control_unit.remove_shielding(src)
|
|
||||||
if(processing) shutdown_core()
|
|
||||||
visible_message("\red The [src.name] melts!")
|
|
||||||
//Might want to have it leave a mess on the floor but no sprites for now
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
||||||
if(air_group || (height==0)) return 1
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
process()
|
|
||||||
if(!processing) ..()
|
|
||||||
//TODO: core functions and stability
|
|
||||||
//TODO: think about checking the airmix for plasma and increasing power output
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
emp_act()//Immune due to not really much in the way of electronics.
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
|
||||||
stability -= 20
|
|
||||||
if(prob(100-stability))
|
|
||||||
if(prob(10))//Might create a node
|
|
||||||
new /obj/effect/blob/node(src.loc,150)
|
|
||||||
else
|
|
||||||
new /obj/effect/blob(src.loc,60)
|
|
||||||
spawn(0)
|
|
||||||
del(src)
|
|
||||||
return
|
return
|
||||||
check_stability()
|
spawn(0)
|
||||||
return
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/am_shielding/Del()
|
||||||
switch(severity)
|
if(control_unit) control_unit.remove_shielding(src)
|
||||||
if(1.0)
|
if(processing) shutdown_core()
|
||||||
stability -= 80
|
visible_message("\red The [src.name] melts!")
|
||||||
if(2.0)
|
//Might want to have it leave a mess on the floor but no sprites for now
|
||||||
stability -= 40
|
..()
|
||||||
if(3.0)
|
return
|
||||||
stability -= 20
|
|
||||||
check_stability()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
bullet_act(var/obj/item/projectile/Proj)
|
/obj/machinery/am_shielding/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||||
if(Proj.flag != "bullet")
|
if(air_group || (height==0)) return 1
|
||||||
stability -= Proj.force/2
|
return 0
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
update_icon()
|
/obj/machinery/am_shielding/process()
|
||||||
overlays = null
|
if(!processing) ..()
|
||||||
for(var/direction in alldirs)
|
//TODO: core functions and stability
|
||||||
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
//TODO: think about checking the airmix for plasma and increasing power output
|
||||||
if((istype(machine, /obj/machinery/am_shielding) && machine:control_unit == control_unit)||(istype(machine, /obj/machinery/power/am_control_unit) && machine == control_unit))
|
return
|
||||||
overlays += "shield_[direction]"
|
|
||||||
|
|
||||||
if(core_check())
|
|
||||||
overlays += "core"
|
|
||||||
if(!processing) setup_core()
|
|
||||||
else if(processing) shutdown_core()
|
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/W, mob/user)
|
/obj/machinery/am_shielding/emp_act()//Immune due to not really much in the way of electronics.
|
||||||
if(!istype(W) || !user) return
|
return 0
|
||||||
if(W.force > 10)
|
|
||||||
stability -= W.force/2
|
|
||||||
check_stability()
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/blob_act()
|
||||||
//Call this to link a detected shilding unit to the controller
|
stability -= 20
|
||||||
proc/link_control(var/obj/machinery/power/am_control_unit/AMC)
|
if(prob(100-stability))
|
||||||
if(!istype(AMC)) return 0
|
if(prob(10))//Might create a node
|
||||||
if(control_unit && control_unit != AMC) return 0//Already have one
|
new /obj/effect/blob/node(src.loc,150)
|
||||||
control_unit = AMC
|
else
|
||||||
control_unit.add_shielding(src,1)
|
new /obj/effect/blob(src.loc,60)
|
||||||
return 1
|
spawn(0)
|
||||||
|
|
||||||
|
|
||||||
//Scans cards for shields or the control unit and if all there it
|
|
||||||
proc/core_check()
|
|
||||||
for(var/direction in alldirs)
|
|
||||||
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
|
||||||
if(!machine) return 0//Need all for a core
|
|
||||||
if(!istype(machine, /obj/machinery/am_shielding) && !istype(machine, /obj/machinery/power/am_control_unit)) return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
proc/setup_core()
|
|
||||||
processing = 1
|
|
||||||
machines.Add(src)
|
|
||||||
if(!control_unit) return
|
|
||||||
control_unit.linked_cores.Add(src)
|
|
||||||
control_unit.reported_core_efficiency += efficiency
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/shutdown_core()
|
|
||||||
processing = 0
|
|
||||||
machines.Remove(src)
|
|
||||||
if(!control_unit) return
|
|
||||||
control_unit.linked_cores.Remove(src)
|
|
||||||
control_unit.reported_core_efficiency -= efficiency
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/check_stability(var/injecting_fuel = 0)
|
|
||||||
if(stability > 0) return
|
|
||||||
if(injecting_fuel && control_unit)
|
|
||||||
control_unit.exploding = 1
|
|
||||||
if(src)
|
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
check_stability()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
proc/recalc_efficiency(var/new_efficiency)//tbh still not 100% sure how I want to deal with efficiency so this is likely temp
|
/obj/machinery/am_shielding/ex_act(severity)
|
||||||
if(!control_unit || !processing) return
|
switch(severity)
|
||||||
if(stability < 50)
|
if(1.0)
|
||||||
new_efficiency /= 2
|
stability -= 80
|
||||||
control_unit.reported_core_efficiency += (new_efficiency - efficiency)
|
if(2.0)
|
||||||
efficiency = new_efficiency
|
stability -= 40
|
||||||
return
|
if(3.0)
|
||||||
|
stability -= 20
|
||||||
|
check_stability()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/bullet_act(var/obj/item/projectile/Proj)
|
||||||
|
if(Proj.flag != "bullet")
|
||||||
|
stability -= Proj.force/2
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/update_icon()
|
||||||
|
overlays = null
|
||||||
|
for(var/direction in alldirs)
|
||||||
|
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
||||||
|
if((istype(machine, /obj/machinery/am_shielding) && machine:control_unit == control_unit)||(istype(machine, /obj/machinery/power/am_control_unit) && machine == control_unit))
|
||||||
|
overlays += "shield_[direction]"
|
||||||
|
|
||||||
|
if(core_check())
|
||||||
|
overlays += "core"
|
||||||
|
if(!processing) setup_core()
|
||||||
|
else if(processing) shutdown_core()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/attackby(obj/item/W, mob/user)
|
||||||
|
if(!istype(W) || !user) return
|
||||||
|
if(W.force > 10)
|
||||||
|
stability -= W.force/2
|
||||||
|
check_stability()
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Call this to link a detected shilding unit to the controller
|
||||||
|
/obj/machinery/am_shielding/proc/link_control(var/obj/machinery/power/am_control_unit/AMC)
|
||||||
|
if(!istype(AMC)) return 0
|
||||||
|
if(control_unit && control_unit != AMC) return 0//Already have one
|
||||||
|
control_unit = AMC
|
||||||
|
control_unit.add_shielding(src,1)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
//Scans cards for shields or the control unit and if all there it
|
||||||
|
/obj/machinery/am_shielding/proc/core_check()
|
||||||
|
for(var/direction in alldirs)
|
||||||
|
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
||||||
|
if(!machine) return 0//Need all for a core
|
||||||
|
if(!istype(machine, /obj/machinery/am_shielding) && !istype(machine, /obj/machinery/power/am_control_unit)) return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/proc/setup_core()
|
||||||
|
processing = 1
|
||||||
|
machines.Add(src)
|
||||||
|
if(!control_unit) return
|
||||||
|
control_unit.linked_cores.Add(src)
|
||||||
|
control_unit.reported_core_efficiency += efficiency
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/proc/shutdown_core()
|
||||||
|
processing = 0
|
||||||
|
machines.Remove(src)
|
||||||
|
if(!control_unit) return
|
||||||
|
control_unit.linked_cores.Remove(src)
|
||||||
|
control_unit.reported_core_efficiency -= efficiency
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/proc/check_stability(var/injecting_fuel = 0)
|
||||||
|
if(stability > 0) return
|
||||||
|
if(injecting_fuel && control_unit)
|
||||||
|
control_unit.exploding = 1
|
||||||
|
if(src)
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/am_shielding/proc/recalc_efficiency(var/new_efficiency)//tbh still not 100% sure how I want to deal with efficiency so this is likely temp
|
||||||
|
if(!control_unit || !processing) return
|
||||||
|
if(stability < 50)
|
||||||
|
new_efficiency /= 2
|
||||||
|
control_unit.reported_core_efficiency += (new_efficiency - efficiency)
|
||||||
|
efficiency = new_efficiency
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -214,10 +214,10 @@ proc/cardinalrange(var/center)
|
|||||||
m_amt = 100
|
m_amt = 100
|
||||||
w_amt = 2000
|
w_amt = 2000
|
||||||
|
|
||||||
attackby(var/obj/item/I, var/mob/user)
|
/obj/item/device/am_shielding_container/attackby(var/obj/item/I, var/mob/user)
|
||||||
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
|
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
|
||||||
new/obj/machinery/am_shielding(src.loc)
|
new/obj/machinery/am_shielding(src.loc)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
|
||||||
..()
|
|
||||||
return
|
return
|
||||||
|
..()
|
||||||
|
return
|
||||||
@@ -20,145 +20,145 @@
|
|||||||
var/lastgenlev = -1
|
var/lastgenlev = -1
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/generator/New()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
spawn(5)
|
spawn(5)
|
||||||
circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST)
|
circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST)
|
||||||
circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST)
|
circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST)
|
||||||
|
|
||||||
if(circ1)
|
if(circ1)
|
||||||
circ1.side = 1
|
circ1.side = 1
|
||||||
circ1.update_icon()
|
circ1.update_icon()
|
||||||
if(circ2)
|
if(circ2)
|
||||||
circ2.side = 2
|
circ2.side = 2
|
||||||
circ2.update_icon()
|
circ2.update_icon()
|
||||||
|
|
||||||
if(!circ1 || !circ2)
|
if(!circ1 || !circ2)
|
||||||
stat |= BROKEN
|
stat |= BROKEN
|
||||||
|
|
||||||
updateicon()
|
updateicon()
|
||||||
|
|
||||||
proc/updateicon()
|
/obj/machinery/power/generator/proc/updateicon()
|
||||||
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
overlays = null
|
overlays = null
|
||||||
else
|
else
|
||||||
overlays = null
|
overlays = null
|
||||||
|
|
||||||
if(lastgenlev != 0)
|
if(lastgenlev != 0)
|
||||||
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
|
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
|
||||||
|
|
||||||
#define GENRATE 800 // generator output coefficient from Q
|
#define GENRATE 800 // generator output coefficient from Q
|
||||||
|
|
||||||
process()
|
/obj/machinery/power/generator/process()
|
||||||
|
|
||||||
//world << "Generator process ran"
|
//world << "Generator process ran"
|
||||||
|
|
||||||
if(!circ1 || !circ2)
|
if(!circ1 || !circ2)
|
||||||
return
|
return
|
||||||
|
|
||||||
//world << "circ1 and circ2 pass"
|
//world << "circ1 and circ2 pass"
|
||||||
|
|
||||||
var/datum/gas_mixture/cold_air = circ1.return_transfer_air()
|
var/datum/gas_mixture/cold_air = circ1.return_transfer_air()
|
||||||
var/datum/gas_mixture/hot_air = circ2.return_transfer_air()
|
var/datum/gas_mixture/hot_air = circ2.return_transfer_air()
|
||||||
|
|
||||||
lastgen = 0
|
lastgen = 0
|
||||||
|
|
||||||
//world << "hot_air = [hot_air]; cold_air = [cold_air];"
|
//world << "hot_air = [hot_air]; cold_air = [cold_air];"
|
||||||
|
|
||||||
if(cold_air && hot_air)
|
if(cold_air && hot_air)
|
||||||
|
|
||||||
//world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];"
|
//world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];"
|
||||||
|
|
||||||
//world << "coldair and hotair pass"
|
//world << "coldair and hotair pass"
|
||||||
var/cold_air_heat_capacity = cold_air.heat_capacity()
|
var/cold_air_heat_capacity = cold_air.heat_capacity()
|
||||||
var/hot_air_heat_capacity = hot_air.heat_capacity()
|
var/hot_air_heat_capacity = hot_air.heat_capacity()
|
||||||
|
|
||||||
var/delta_temperature = hot_air.temperature - cold_air.temperature
|
var/delta_temperature = hot_air.temperature - cold_air.temperature
|
||||||
|
|
||||||
//world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]"
|
//world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]"
|
||||||
|
|
||||||
if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0)
|
if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0)
|
||||||
var/efficiency = 0.65
|
var/efficiency = 0.65
|
||||||
|
|
||||||
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
||||||
|
|
||||||
var/heat = energy_transfer*(1-efficiency)
|
var/heat = energy_transfer*(1-efficiency)
|
||||||
lastgen = energy_transfer*efficiency
|
lastgen = energy_transfer*efficiency
|
||||||
|
|
||||||
//world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];"
|
//world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];"
|
||||||
|
|
||||||
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
|
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
|
||||||
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
|
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
|
||||||
|
|
||||||
world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
|
world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
|
||||||
|
|
||||||
add_avail(lastgen)
|
add_avail(lastgen)
|
||||||
// update icon overlays only if displayed level has changed
|
// update icon overlays only if displayed level has changed
|
||||||
|
|
||||||
if(hot_air)
|
if(hot_air)
|
||||||
circ2.air2.merge(hot_air)
|
circ2.air2.merge(hot_air)
|
||||||
|
|
||||||
if(cold_air)
|
if(cold_air)
|
||||||
circ1.air2.merge(cold_air)
|
circ1.air2.merge(cold_air)
|
||||||
|
|
||||||
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
|
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
|
||||||
if(genlev != lastgenlev)
|
if(genlev != lastgenlev)
|
||||||
lastgenlev = genlev
|
lastgenlev = genlev
|
||||||
updateicon()
|
|
||||||
|
|
||||||
src.updateDialog()
|
|
||||||
|
|
||||||
attack_ai(mob/user)
|
|
||||||
if(stat & (BROKEN|NOPOWER)) return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user)
|
|
||||||
add_fingerprint(user)
|
|
||||||
if(stat & (BROKEN|NOPOWER)) return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
|
|
||||||
proc/interact(mob/user)
|
|
||||||
if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
|
|
||||||
user.machine = null
|
|
||||||
user << browse(null, "window=teg")
|
|
||||||
return
|
|
||||||
|
|
||||||
user.machine = src
|
|
||||||
|
|
||||||
var/t = "<PRE><B>Thermo-Electric Generator</B><HR>"
|
|
||||||
|
|
||||||
t += "Output : [round(lastgen)] W<BR><BR>"
|
|
||||||
|
|
||||||
t += "<B>Cold loop</B><BR>"
|
|
||||||
t += "Temperature Inlet: [round(circ1.air1.temperature, 0.1)] K Outlet: [round(circ1.air2.temperature, 0.1)] K<BR>"
|
|
||||||
t += "Pressure Inlet: [round(circ1.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ1.air2.return_pressure(), 0.1)] kPa<BR>"
|
|
||||||
|
|
||||||
t += "<B>Hot loop</B><BR>"
|
|
||||||
t += "Temperature Inlet: [round(circ2.air1.temperature, 0.1)] K Outlet: [round(circ2.air2.temperature, 0.1)] K<BR>"
|
|
||||||
t += "Pressure Inlet: [round(circ2.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ2.air2.return_pressure(), 0.1)] kPa<BR>"
|
|
||||||
|
|
||||||
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
|
||||||
|
|
||||||
t += "</PRE>"
|
|
||||||
user << browse(t, "window=teg;size=460x300")
|
|
||||||
onclose(user, "teg")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
Topic(href, href_list)
|
|
||||||
..()
|
|
||||||
if( href_list["close"] )
|
|
||||||
usr << browse(null, "window=teg")
|
|
||||||
usr.machine = null
|
|
||||||
return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
power_change()
|
|
||||||
..()
|
|
||||||
updateicon()
|
updateicon()
|
||||||
|
|
||||||
|
src.updateDialog()
|
||||||
|
|
||||||
|
/obj/machinery/power/generator/attack_ai(mob/user)
|
||||||
|
if(stat & (BROKEN|NOPOWER)) return
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator/attack_hand(mob/user)
|
||||||
|
add_fingerprint(user)
|
||||||
|
if(stat & (BROKEN|NOPOWER)) return
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator/proc/interact(mob/user)
|
||||||
|
if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
|
||||||
|
user.machine = null
|
||||||
|
user << browse(null, "window=teg")
|
||||||
|
return
|
||||||
|
|
||||||
|
user.machine = src
|
||||||
|
|
||||||
|
var/t = "<PRE><B>Thermo-Electric Generator</B><HR>"
|
||||||
|
|
||||||
|
t += "Output : [round(lastgen)] W<BR><BR>"
|
||||||
|
|
||||||
|
t += "<B>Cold loop</B><BR>"
|
||||||
|
t += "Temperature Inlet: [round(circ1.air1.temperature, 0.1)] K Outlet: [round(circ1.air2.temperature, 0.1)] K<BR>"
|
||||||
|
t += "Pressure Inlet: [round(circ1.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ1.air2.return_pressure(), 0.1)] kPa<BR>"
|
||||||
|
|
||||||
|
t += "<B>Hot loop</B><BR>"
|
||||||
|
t += "Temperature Inlet: [round(circ2.air1.temperature, 0.1)] K Outlet: [round(circ2.air2.temperature, 0.1)] K<BR>"
|
||||||
|
t += "Pressure Inlet: [round(circ2.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ2.air2.return_pressure(), 0.1)] kPa<BR>"
|
||||||
|
|
||||||
|
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||||
|
|
||||||
|
t += "</PRE>"
|
||||||
|
user << browse(t, "window=teg;size=460x300")
|
||||||
|
onclose(user, "teg")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
if( href_list["close"] )
|
||||||
|
usr << browse(null, "window=teg")
|
||||||
|
usr.machine = null
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator/power_change()
|
||||||
|
..()
|
||||||
|
updateicon()
|
||||||
|
|
||||||
|
|||||||
@@ -12,131 +12,131 @@
|
|||||||
var/lastgenlev = -1
|
var/lastgenlev = -1
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/generator_type2/New()
|
||||||
..()
|
..()
|
||||||
spawn(5)
|
spawn(5)
|
||||||
input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,WEST)
|
input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,WEST)
|
||||||
input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,EAST)
|
input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,EAST)
|
||||||
if(!input1 || !input2)
|
if(!input1 || !input2)
|
||||||
stat |= BROKEN
|
stat |= BROKEN
|
||||||
updateicon()
|
updateicon()
|
||||||
|
|
||||||
|
|
||||||
proc/updateicon()
|
/obj/machinery/power/generator_type2/proc/updateicon()
|
||||||
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
if(stat & (NOPOWER|BROKEN))
|
||||||
overlays = null
|
overlays = null
|
||||||
else
|
else
|
||||||
overlays = null
|
overlays = null
|
||||||
|
|
||||||
if(lastgenlev != 0)
|
if(lastgenlev != 0)
|
||||||
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
|
overlays += image('icons/obj/power.dmi', "teg-op[lastgenlev]")
|
||||||
|
|
||||||
#define GENRATE 800 // generator output coefficient from Q
|
#define GENRATE 800 // generator output coefficient from Q
|
||||||
|
|
||||||
|
|
||||||
process()
|
/obj/machinery/power/generator_type2/process()
|
||||||
if(!input1 || !input2)
|
if(!input1 || !input2)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/datum/gas_mixture/air1 = input1.return_exchange_air()
|
var/datum/gas_mixture/air1 = input1.return_exchange_air()
|
||||||
var/datum/gas_mixture/air2 = input2.return_exchange_air()
|
var/datum/gas_mixture/air2 = input2.return_exchange_air()
|
||||||
|
|
||||||
|
|
||||||
lastgen = 0
|
lastgen = 0
|
||||||
|
|
||||||
if(air1 && air2)
|
if(air1 && air2)
|
||||||
var/datum/gas_mixture/hot_air = air1
|
var/datum/gas_mixture/hot_air = air1
|
||||||
var/datum/gas_mixture/cold_air = air2
|
var/datum/gas_mixture/cold_air = air2
|
||||||
if(hot_air.temperature < cold_air.temperature)
|
if(hot_air.temperature < cold_air.temperature)
|
||||||
hot_air = air2
|
hot_air = air2
|
||||||
cold_air = air1
|
cold_air = air1
|
||||||
|
|
||||||
var/hot_air_heat_capacity = hot_air.heat_capacity()
|
var/hot_air_heat_capacity = hot_air.heat_capacity()
|
||||||
var/cold_air_heat_capacity = cold_air.heat_capacity()
|
var/cold_air_heat_capacity = cold_air.heat_capacity()
|
||||||
|
|
||||||
var/delta_temperature = hot_air.temperature - cold_air.temperature
|
var/delta_temperature = hot_air.temperature - cold_air.temperature
|
||||||
|
|
||||||
if(delta_temperature > 1 && cold_air_heat_capacity > 0.01 && hot_air_heat_capacity > 0.01)
|
if(delta_temperature > 1 && cold_air_heat_capacity > 0.01 && hot_air_heat_capacity > 0.01)
|
||||||
var/efficiency = (1 - cold_air.temperature/hot_air.temperature)*0.65 //65% of Carnot efficiency
|
var/efficiency = (1 - cold_air.temperature/hot_air.temperature)*0.65 //65% of Carnot efficiency
|
||||||
|
|
||||||
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
||||||
|
|
||||||
var/heat = energy_transfer*(1-efficiency)
|
var/heat = energy_transfer*(1-efficiency)
|
||||||
lastgen = energy_transfer*efficiency
|
lastgen = energy_transfer*efficiency
|
||||||
|
|
||||||
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
|
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
|
||||||
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
|
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
|
||||||
|
|
||||||
world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
|
world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
|
||||||
|
|
||||||
if(input1.network)
|
if(input1.network)
|
||||||
input1.network.update = 1
|
input1.network.update = 1
|
||||||
|
|
||||||
if(input2.network)
|
if(input2.network)
|
||||||
input2.network.update = 1
|
input2.network.update = 1
|
||||||
|
|
||||||
add_avail(lastgen)
|
add_avail(lastgen)
|
||||||
// update icon overlays only if displayed level has changed
|
// update icon overlays only if displayed level has changed
|
||||||
|
|
||||||
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
|
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
|
||||||
if(genlev != lastgenlev)
|
if(genlev != lastgenlev)
|
||||||
lastgenlev = genlev
|
lastgenlev = genlev
|
||||||
updateicon()
|
|
||||||
|
|
||||||
src.updateDialog()
|
|
||||||
|
|
||||||
|
|
||||||
attack_ai(mob/user)
|
|
||||||
if(stat & (BROKEN|NOPOWER)) return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user)
|
|
||||||
add_fingerprint(user)
|
|
||||||
if(stat & (BROKEN|NOPOWER)) return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
|
|
||||||
proc/interact(mob/user)
|
|
||||||
if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
|
|
||||||
user.machine = null
|
|
||||||
user << browse(null, "window=teg")
|
|
||||||
return
|
|
||||||
|
|
||||||
user.machine = src
|
|
||||||
|
|
||||||
var/t = "<PRE><B>Thermo-Electric Generator</B><HR>"
|
|
||||||
|
|
||||||
t += "Output : [round(lastgen)] W<BR><BR>"
|
|
||||||
|
|
||||||
t += "<B>Cold loop</B><BR>"
|
|
||||||
t += "Temperature: [round(input1.air_contents.temperature, 0.1)] K<BR>"
|
|
||||||
t += "Pressure: [round(input1.air_contents.return_pressure(), 0.1)] kPa<BR>"
|
|
||||||
|
|
||||||
t += "<B>Hot loop</B><BR>"
|
|
||||||
t += "Temperature: [round(input2.air_contents.temperature, 0.1)] K<BR>"
|
|
||||||
t += "Pressure: [round(input2.air_contents.return_pressure(), 0.1)] kPa<BR>"
|
|
||||||
|
|
||||||
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
|
||||||
|
|
||||||
t += "</PRE>"
|
|
||||||
user << browse(t, "window=teg;size=460x300")
|
|
||||||
onclose(user, "teg")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
Topic(href, href_list)
|
|
||||||
..()
|
|
||||||
|
|
||||||
if( href_list["close"] )
|
|
||||||
usr << browse(null, "window=teg")
|
|
||||||
usr.machine = null
|
|
||||||
return 0
|
|
||||||
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
power_change()
|
|
||||||
..()
|
|
||||||
updateicon()
|
updateicon()
|
||||||
|
|
||||||
|
src.updateDialog()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator_type2/attack_ai(mob/user)
|
||||||
|
if(stat & (BROKEN|NOPOWER)) return
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator_type2/attack_hand(mob/user)
|
||||||
|
add_fingerprint(user)
|
||||||
|
if(stat & (BROKEN|NOPOWER)) return
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator_type2/proc/interact(mob/user)
|
||||||
|
if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
|
||||||
|
user.machine = null
|
||||||
|
user << browse(null, "window=teg")
|
||||||
|
return
|
||||||
|
|
||||||
|
user.machine = src
|
||||||
|
|
||||||
|
var/t = "<PRE><B>Thermo-Electric Generator</B><HR>"
|
||||||
|
|
||||||
|
t += "Output : [round(lastgen)] W<BR><BR>"
|
||||||
|
|
||||||
|
t += "<B>Cold loop</B><BR>"
|
||||||
|
t += "Temperature: [round(input1.air_contents.temperature, 0.1)] K<BR>"
|
||||||
|
t += "Pressure: [round(input1.air_contents.return_pressure(), 0.1)] kPa<BR>"
|
||||||
|
|
||||||
|
t += "<B>Hot loop</B><BR>"
|
||||||
|
t += "Temperature: [round(input2.air_contents.temperature, 0.1)] K<BR>"
|
||||||
|
t += "Pressure: [round(input2.air_contents.return_pressure(), 0.1)] kPa<BR>"
|
||||||
|
|
||||||
|
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||||
|
|
||||||
|
t += "</PRE>"
|
||||||
|
user << browse(t, "window=teg;size=460x300")
|
||||||
|
onclose(user, "teg")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator_type2/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
|
||||||
|
if( href_list["close"] )
|
||||||
|
usr << browse(null, "window=teg")
|
||||||
|
usr.machine = null
|
||||||
|
return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/generator_type2/power_change()
|
||||||
|
..()
|
||||||
|
updateicon()
|
||||||
@@ -106,187 +106,185 @@ display round(lastgen) and plasmatank amount
|
|||||||
var/time_per_sheet = 10
|
var/time_per_sheet = 10
|
||||||
var/heat = 0
|
var/heat = 0
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/port_gen/pacman/New()
|
||||||
..()
|
..()
|
||||||
component_parts = list()
|
component_parts = list()
|
||||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||||
component_parts += new /obj/item/weapon/cable_coil(src)
|
component_parts += new /obj/item/weapon/cable_coil(src)
|
||||||
component_parts += new /obj/item/weapon/cable_coil(src)
|
component_parts += new /obj/item/weapon/cable_coil(src)
|
||||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||||
component_parts += new board_path(src)
|
component_parts += new board_path(src)
|
||||||
RefreshParts()
|
|
||||||
|
|
||||||
RefreshParts()
|
RefreshParts()
|
||||||
var/temp_rating = 0
|
|
||||||
var/temp_reliability = 0
|
|
||||||
for(var/obj/item/weapon/stock_parts/SP in component_parts)
|
|
||||||
if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
|
|
||||||
max_sheets = SP.rating * SP.rating * 50
|
|
||||||
else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
|
|
||||||
temp_rating += SP.rating
|
|
||||||
for(var/obj/item/weapon/CP in component_parts)
|
|
||||||
temp_reliability += CP.reliability
|
|
||||||
reliability = min(round(temp_reliability / 4), 100)
|
|
||||||
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
|
|
||||||
|
|
||||||
examine()
|
/obj/machinery/power/port_gen/pacman/RefreshParts()
|
||||||
..()
|
var/temp_rating = 0
|
||||||
usr << "\blue The generator has [sheets] units of fuel left, producing [power_gen] per cycle."
|
var/temp_reliability = 0
|
||||||
if(crit_fail) usr << "\red The generator seems to have broken down."
|
for(var/obj/item/weapon/stock_parts/SP in component_parts)
|
||||||
|
if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
|
||||||
|
max_sheets = SP.rating * SP.rating * 50
|
||||||
|
else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
|
||||||
|
temp_rating += SP.rating
|
||||||
|
for(var/obj/item/weapon/CP in component_parts)
|
||||||
|
temp_reliability += CP.reliability
|
||||||
|
reliability = min(round(temp_reliability / 4), 100)
|
||||||
|
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
|
||||||
|
|
||||||
HasFuel()
|
/obj/machinery/power/port_gen/pacman/examine()
|
||||||
if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left)
|
..()
|
||||||
return 1
|
usr << "\blue The generator has [sheets] units of fuel left, producing [power_gen] per cycle."
|
||||||
return 0
|
if(crit_fail) usr << "\red The generator seems to have broken down."
|
||||||
|
|
||||||
UseFuel()
|
/obj/machinery/power/port_gen/pacman/HasFuel()
|
||||||
var/needed_sheets = 1 / (time_per_sheet / power_output)
|
if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left)
|
||||||
var/temp = min(needed_sheets, sheet_left)
|
return 1
|
||||||
needed_sheets -= temp
|
return 0
|
||||||
sheet_left -= temp
|
|
||||||
sheets -= round(needed_sheets)
|
|
||||||
needed_sheets -= round(needed_sheets)
|
|
||||||
if (sheet_left <= 0 && sheets > 0)
|
|
||||||
sheet_left = 1 - needed_sheets
|
|
||||||
sheets--
|
|
||||||
|
|
||||||
var/lower_limit = 56 + power_output * 10
|
/obj/machinery/power/port_gen/pacman/UseFuel()
|
||||||
var/upper_limit = 76 + power_output * 10
|
var/needed_sheets = 1 / (time_per_sheet / power_output)
|
||||||
var/bias = 0
|
var/temp = min(needed_sheets, sheet_left)
|
||||||
if (power_output > 4)
|
needed_sheets -= temp
|
||||||
upper_limit = 400
|
sheet_left -= temp
|
||||||
bias = power_output * 3
|
sheets -= round(needed_sheets)
|
||||||
|
needed_sheets -= round(needed_sheets)
|
||||||
|
if (sheet_left <= 0 && sheets > 0)
|
||||||
|
sheet_left = 1 - needed_sheets
|
||||||
|
sheets--
|
||||||
|
|
||||||
|
var/lower_limit = 56 + power_output * 10
|
||||||
|
var/upper_limit = 76 + power_output * 10
|
||||||
|
var/bias = 0
|
||||||
|
if (power_output > 4)
|
||||||
|
upper_limit = 400
|
||||||
|
bias = power_output * 3
|
||||||
|
if (heat < lower_limit)
|
||||||
|
heat += 3
|
||||||
|
else
|
||||||
|
heat += rand(-7 + bias, 7 + bias)
|
||||||
if (heat < lower_limit)
|
if (heat < lower_limit)
|
||||||
heat += 3
|
heat = lower_limit
|
||||||
else
|
if (heat > upper_limit)
|
||||||
heat += rand(-7 + bias, 7 + bias)
|
heat = upper_limit
|
||||||
if (heat < lower_limit)
|
|
||||||
heat = lower_limit
|
|
||||||
if (heat > upper_limit)
|
|
||||||
heat = upper_limit
|
|
||||||
|
|
||||||
if (heat > 300)
|
if (heat > 300)
|
||||||
overheat()
|
overheat()
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/power/port_gen/pacman/handleInactive()
|
||||||
|
heat -= 2
|
||||||
|
if (heat < 0)
|
||||||
|
heat = 0
|
||||||
|
else
|
||||||
|
for(var/mob/M in viewers(1, src))
|
||||||
|
if (M.client && M.machine == src)
|
||||||
|
src.updateUsrDialog()
|
||||||
|
|
||||||
|
/obj/machinery/power/port_gen/pacman/proc/overheat()
|
||||||
|
explosion(src.loc, 2, 5, 2, -1)
|
||||||
|
|
||||||
|
/obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||||
|
if(istype(O, sheet_path))
|
||||||
|
var/obj/item/stack/addstack = O
|
||||||
|
var/amount = min((max_sheets - sheets), addstack.amount)
|
||||||
|
if(amount < 1)
|
||||||
|
user << "\blue The [src.name] is full!"
|
||||||
|
return
|
||||||
|
user << "\blue You add [amount] sheets to the [src.name]."
|
||||||
|
sheets += amount
|
||||||
|
addstack.use(amount)
|
||||||
|
return
|
||||||
|
else if (istype(O, /obj/item/weapon/card/emag))
|
||||||
|
emagged = 1
|
||||||
|
emp_act(1)
|
||||||
|
else if(!active)
|
||||||
|
if(istype(O, /obj/item/weapon/wrench))
|
||||||
|
anchored = !anchored
|
||||||
|
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||||
|
if(anchored)
|
||||||
|
user << "\blue You secure the generator to the floor."
|
||||||
|
else
|
||||||
|
user << "\blue You unsecure the generator from the floor."
|
||||||
|
makepowernets()
|
||||||
|
else if(istype(O, /obj/item/weapon/screwdriver))
|
||||||
|
open = !open
|
||||||
|
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
||||||
|
if(open)
|
||||||
|
user << "\blue You open the access panel."
|
||||||
|
else
|
||||||
|
user << "\blue You close the access panel."
|
||||||
|
else if(istype(O, /obj/item/weapon/crowbar) && !open)
|
||||||
|
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
||||||
|
for(var/obj/item/I in component_parts)
|
||||||
|
if(I.reliability < 100)
|
||||||
|
I.crit_fail = 1
|
||||||
|
I.loc = src.loc
|
||||||
|
new_frame.state = 2
|
||||||
|
new_frame.icon_state = "box_1"
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
|
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
|
||||||
|
..()
|
||||||
|
if (!anchored)
|
||||||
return
|
return
|
||||||
|
|
||||||
handleInactive()
|
interact(user)
|
||||||
heat -= 2
|
|
||||||
if (heat < 0)
|
|
||||||
heat = 0
|
|
||||||
else
|
|
||||||
for(var/mob/M in viewers(1, src))
|
|
||||||
if (M.client && M.machine == src)
|
|
||||||
src.updateUsrDialog()
|
|
||||||
|
|
||||||
proc
|
/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob)
|
||||||
overheat()
|
interact(user)
|
||||||
explosion(src.loc, 2, 5, 2, -1)
|
|
||||||
|
|
||||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user as mob)
|
||||||
if(istype(O, sheet_path))
|
interact(user)
|
||||||
var/obj/item/stack/addstack = O
|
|
||||||
var/amount = min((max_sheets - sheets), addstack.amount)
|
|
||||||
if(amount < 1)
|
|
||||||
user << "\blue The [src.name] is full!"
|
|
||||||
return
|
|
||||||
user << "\blue You add [amount] sheets to the [src.name]."
|
|
||||||
sheets += amount
|
|
||||||
addstack.use(amount)
|
|
||||||
return
|
|
||||||
else if (istype(O, /obj/item/weapon/card/emag))
|
|
||||||
emagged = 1
|
|
||||||
emp_act(1)
|
|
||||||
else if(!active)
|
|
||||||
if(istype(O, /obj/item/weapon/wrench))
|
|
||||||
anchored = !anchored
|
|
||||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
|
||||||
if(anchored)
|
|
||||||
user << "\blue You secure the generator to the floor."
|
|
||||||
else
|
|
||||||
user << "\blue You unsecure the generator from the floor."
|
|
||||||
makepowernets()
|
|
||||||
else if(istype(O, /obj/item/weapon/screwdriver))
|
|
||||||
open = !open
|
|
||||||
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
|
||||||
if(open)
|
|
||||||
user << "\blue You open the access panel."
|
|
||||||
else
|
|
||||||
user << "\blue You close the access panel."
|
|
||||||
else if(istype(O, /obj/item/weapon/crowbar) && !open)
|
|
||||||
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
|
||||||
for(var/obj/item/I in component_parts)
|
|
||||||
if(I.reliability < 100)
|
|
||||||
I.crit_fail = 1
|
|
||||||
I.loc = src.loc
|
|
||||||
new_frame.state = 2
|
|
||||||
new_frame.icon_state = "box_1"
|
|
||||||
del(src)
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
/obj/machinery/power/port_gen/pacman/proc/interact(mob/user)
|
||||||
..()
|
if (get_dist(src, user) > 1 )
|
||||||
if (!anchored)
|
if (!istype(user, /mob/living/silicon/ai))
|
||||||
|
user.machine = null
|
||||||
|
user << browse(null, "window=port_gen")
|
||||||
return
|
return
|
||||||
|
|
||||||
interact(user)
|
user.machine = src
|
||||||
|
|
||||||
attack_ai(mob/user as mob)
|
var/dat = text("<b>[name]</b><br>")
|
||||||
interact(user)
|
if (active)
|
||||||
|
dat += text("Generator: <A href='?src=\ref[src];action=disable'>On</A><br>")
|
||||||
|
else
|
||||||
|
dat += text("Generator: <A href='?src=\ref[src];action=enable'>Off</A><br>")
|
||||||
|
dat += text("sheets: [sheets]<br>")
|
||||||
|
var/stack_percent = round(sheet_left * 100, 1)
|
||||||
|
dat += text("Current stack: [stack_percent]%<br>")
|
||||||
|
dat += text("Power output: <A href='?src=\ref[src];action=lower_power'>-</A> [power_gen * power_output] <A href='?src=\ref[src];action=higher_power'>+</A><br>")
|
||||||
|
dat += text("Heat: [heat]<br>")
|
||||||
|
dat += "<br><A href='?src=\ref[src];action=close'>Close</A>"
|
||||||
|
user << browse("[dat]", "window=port_gen")
|
||||||
|
|
||||||
attack_paw(mob/user as mob)
|
/obj/machinery/power/port_gen/pacman/Topic(href, href_list)
|
||||||
interact(user)
|
if(..())
|
||||||
|
return
|
||||||
|
|
||||||
proc
|
src.add_fingerprint(usr)
|
||||||
interact(mob/user)
|
if(href_list["action"])
|
||||||
if (get_dist(src, user) > 1 )
|
if(href_list["action"] == "enable")
|
||||||
if (!istype(user, /mob/living/silicon/ai))
|
if(!active && HasFuel() && !crit_fail)
|
||||||
user.machine = null
|
active = 1
|
||||||
user << browse(null, "window=port_gen")
|
icon_state = "portgen1"
|
||||||
return
|
src.updateUsrDialog()
|
||||||
|
if(href_list["action"] == "disable")
|
||||||
user.machine = src
|
|
||||||
|
|
||||||
var/dat = text("<b>[name]</b><br>")
|
|
||||||
if (active)
|
if (active)
|
||||||
dat += text("Generator: <A href='?src=\ref[src];action=disable'>On</A><br>")
|
active = 0
|
||||||
else
|
icon_state = "portgen0"
|
||||||
dat += text("Generator: <A href='?src=\ref[src];action=enable'>Off</A><br>")
|
src.updateUsrDialog()
|
||||||
dat += text("sheets: [sheets]<br>")
|
if(href_list["action"] == "lower_power")
|
||||||
var/stack_percent = round(sheet_left * 100, 1)
|
if (power_output > 1)
|
||||||
dat += text("Current stack: [stack_percent]%<br>")
|
power_output--
|
||||||
dat += text("Power output: <A href='?src=\ref[src];action=lower_power'>-</A> [power_gen * power_output] <A href='?src=\ref[src];action=higher_power'>+</A><br>")
|
src.updateUsrDialog()
|
||||||
dat += text("Heat: [heat]<br>")
|
if (href_list["action"] == "higher_power")
|
||||||
dat += "<br><A href='?src=\ref[src];action=close'>Close</A>"
|
if (power_output < 4 || emagged)
|
||||||
user << browse("[dat]", "window=port_gen")
|
power_output++
|
||||||
|
src.updateUsrDialog()
|
||||||
Topic(href, href_list)
|
if (href_list["action"] == "close")
|
||||||
if(..())
|
usr << browse(null, "window=port_gen")
|
||||||
return
|
usr.machine = null
|
||||||
|
|
||||||
src.add_fingerprint(usr)
|
|
||||||
if(href_list["action"])
|
|
||||||
if(href_list["action"] == "enable")
|
|
||||||
if(!active && HasFuel() && !crit_fail)
|
|
||||||
active = 1
|
|
||||||
icon_state = "portgen1"
|
|
||||||
src.updateUsrDialog()
|
|
||||||
if(href_list["action"] == "disable")
|
|
||||||
if (active)
|
|
||||||
active = 0
|
|
||||||
icon_state = "portgen0"
|
|
||||||
src.updateUsrDialog()
|
|
||||||
if(href_list["action"] == "lower_power")
|
|
||||||
if (power_output > 1)
|
|
||||||
power_output--
|
|
||||||
src.updateUsrDialog()
|
|
||||||
if (href_list["action"] == "higher_power")
|
|
||||||
if (power_output < 4 || emagged)
|
|
||||||
power_output++
|
|
||||||
src.updateUsrDialog()
|
|
||||||
if (href_list["action"] == "close")
|
|
||||||
usr << browse(null, "window=port_gen")
|
|
||||||
usr.machine = null
|
|
||||||
|
|
||||||
/obj/machinery/power/port_gen/pacman/super
|
/obj/machinery/power/port_gen/pacman/super
|
||||||
name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator"
|
name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator"
|
||||||
|
|||||||
@@ -318,12 +318,11 @@ Turfs have these additional procs and vars:
|
|||||||
|
|
||||||
\********************************************************************/
|
\********************************************************************/
|
||||||
|
|
||||||
var
|
var/sd_dark_icon = 'icons/effects/ss13_dark_alpha7.dmi' // icon used for darkness
|
||||||
sd_dark_icon = 'icons/effects/ss13_dark_alpha7.dmi' // icon used for darkness
|
var/sd_dark_shades = 7 // number of icon state in sd_dark_icon
|
||||||
sd_dark_shades = 7 // number of icon state in sd_dark_icon
|
var/sd_light_layer = 10 // graphics layer for light effect
|
||||||
sd_light_layer = 10 // graphics layer for light effect
|
var/sd_light_outside = 0 // how bright it is outside
|
||||||
sd_light_outside = 0 // how bright it is outside
|
var/sd_top_luminosity = 0
|
||||||
sd_top_luminosity = 0
|
|
||||||
|
|
||||||
// since we're not using these, comment out all occurances to save CPU
|
// since we're not using these, comment out all occurances to save CPU
|
||||||
/*
|
/*
|
||||||
@@ -351,309 +350,303 @@ proc
|
|||||||
for(var/turf/T in sd_light_spill_turfs)
|
for(var/turf/T in sd_light_spill_turfs)
|
||||||
T.sd_ApplySpill()
|
T.sd_ApplySpill()
|
||||||
*/
|
*/
|
||||||
proc
|
proc/sd_SetDarkIcon(icon, shades)
|
||||||
sd_SetDarkIcon(icon, shades)
|
// reset the darkness icon and number of shades of darkness
|
||||||
// reset the darkness icon and number of shades of darkness
|
sd_dark_icon = icon
|
||||||
sd_dark_icon = icon
|
sd_dark_shades = shades
|
||||||
sd_dark_shades = shades
|
// change existing areas
|
||||||
// change existing areas
|
for(var/area/A)
|
||||||
for(var/area/A)
|
if(A.sd_darkimage) A.sd_LightLevel(A.sd_light_level,0)
|
||||||
if(A.sd_darkimage) A.sd_LightLevel(A.sd_light_level,0)
|
|
||||||
|
|
||||||
|
|
||||||
atom
|
atom/New()
|
||||||
New()
|
..()
|
||||||
..()
|
// if this is not an area and is luminous
|
||||||
// if this is not an area and is luminous
|
if(!isarea(src)&&(luminosity>0))
|
||||||
if(!isarea(src)&&(luminosity>0))
|
spawn(1) // delay to allow map load
|
||||||
spawn(1) // delay to allow map load
|
sd_ApplyLum()
|
||||||
sd_ApplyLum()
|
|
||||||
|
|
||||||
Del()
|
atom/Del()
|
||||||
// if this is not an area and is luminous
|
// if this is not an area and is luminous
|
||||||
if(!isarea(src)&&(luminosity>0))
|
if(!isarea(src)&&(luminosity>0))
|
||||||
sd_StripLum()
|
sd_StripLum()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
proc
|
atom/proc/sd_ApplyLum(list/V = view(luminosity,src), center = src)
|
||||||
sd_ApplyLum(list/V = view(luminosity,src), center = src)
|
if(src.luminosity>sd_top_luminosity)
|
||||||
if(src.luminosity>sd_top_luminosity)
|
sd_top_luminosity = src.luminosity
|
||||||
sd_top_luminosity = src.luminosity
|
// loop through all the turfs in V
|
||||||
// loop through all the turfs in V
|
for(var/turf/T in V)
|
||||||
for(var/turf/T in V)
|
/* increase the turf's brightness depending on the
|
||||||
/* increase the turf's brightness depending on the
|
brightness and distance of the lightsource */
|
||||||
brightness and distance of the lightsource */
|
T.sd_lumcount += (luminosity-get_dist(center,T))
|
||||||
T.sd_lumcount += (luminosity-get_dist(center,T))
|
// update the turf's area
|
||||||
// update the turf's area
|
|
||||||
|
|
||||||
//
|
//
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc+([luminosity-get_dist(center,T)]) from [center] ([center:x],[center:y])"
|
// slog << "\red lc+([luminosity-get_dist(center,T)]) from [center] ([center:x],[center:y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
|
|
||||||
sd_StripLum(list/V = view(luminosity,src), center = src)
|
atom/proc/sd_StripLum(list/V = view(luminosity,src), center = src)
|
||||||
// loop through all the turfs in V
|
// loop through all the turfs in V
|
||||||
for(var/turf/T in V)
|
for(var/turf/T in V)
|
||||||
/* increase the turf's brightness depending on the
|
/* increase the turf's brightness depending on the
|
||||||
brightness and distance of the lightsource */
|
brightness and distance of the lightsource */
|
||||||
T.sd_lumcount -= (luminosity-get_dist(center,T))
|
T.sd_lumcount -= (luminosity-get_dist(center,T))
|
||||||
T.sd_lumcount = max(0, T.sd_lumcount)
|
T.sd_lumcount = max(0, T.sd_lumcount)
|
||||||
|
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc-([luminosity-get_dist(center,T)]) from [center] ([center:x],[center:y])"
|
// slog << "\red lc-([luminosity-get_dist(center,T)]) from [center] ([center:x],[center:y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
|
|
||||||
// update the turf's area
|
// update the turf's area
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
|
|
||||||
sd_ApplyLocalLum(list/affected = view(sd_top_luminosity,src))
|
atom/proc/sd_ApplyLocalLum(list/affected = view(sd_top_luminosity,src))
|
||||||
// Reapplies the lighting effect of all atoms in affected.
|
// Reapplies the lighting effect of all atoms in affected.
|
||||||
for(var/atom/A in affected)
|
for(var/atom/A in affected)
|
||||||
if(A.luminosity) A.sd_ApplyLum()
|
if(A.luminosity) A.sd_ApplyLum()
|
||||||
|
|
||||||
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
||||||
// A:sd_ApplySpill()
|
// A:sd_ApplySpill()
|
||||||
|
|
||||||
sd_StripLocalLum()
|
atom/proc/sd_StripLocalLum()
|
||||||
/* strips all local luminosity
|
/* strips all local luminosity
|
||||||
|
|
||||||
RETURNS: list of all the luminous atoms stripped
|
RETURNS: list of all the luminous atoms stripped
|
||||||
|
|
||||||
IMPORTANT! Each sd_StripLocalLum() call should have a matching
|
IMPORTANT! Each sd_StripLocalLum() call should have a matching
|
||||||
sd_ApplyLocalLum() to restore the local effect. */
|
sd_ApplyLocalLum() to restore the local effect. */
|
||||||
var/list/affected = list()
|
var/list/affected = list()
|
||||||
for(var/atom/A in view(sd_top_luminosity,src))
|
for(var/atom/A in view(sd_top_luminosity,src))
|
||||||
var/turfflag = (isturf(src)?1:0)
|
var/turfflag = (isturf(src)?1:0)
|
||||||
if(A.luminosity && (get_dist(src,A) <= A.luminosity + turfflag))
|
if(A.luminosity && (get_dist(src,A) <= A.luminosity + turfflag))
|
||||||
A.sd_StripLum()
|
A.sd_StripLum()
|
||||||
affected += A
|
affected += A
|
||||||
|
|
||||||
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
||||||
// A:sd_StripSpill()
|
// A:sd_StripSpill()
|
||||||
// affected += A
|
// affected += A
|
||||||
|
|
||||||
return affected
|
return affected
|
||||||
|
|
||||||
sd_SetLuminosity(new_luminosity as num)
|
atom/proc/sd_SetLuminosity(new_luminosity as num)
|
||||||
/* This proc should be called everytime you want to change the
|
/* This proc should be called everytime you want to change the
|
||||||
luminosity of an atom instead of setting it directly.
|
luminosity of an atom instead of setting it directly.
|
||||||
|
|
||||||
new_luminosity is the new value for luminosity. */
|
new_luminosity is the new value for luminosity. */
|
||||||
if(luminosity>0)
|
if(luminosity>0)
|
||||||
sd_StripLum()
|
sd_StripLum()
|
||||||
luminosity = new_luminosity
|
luminosity = new_luminosity
|
||||||
if(luminosity>0)
|
if(luminosity>0)
|
||||||
sd_ApplyLum()
|
sd_ApplyLum()
|
||||||
|
|
||||||
|
|
||||||
sd_SetOpacity(new_opacity as num)
|
atom/proc/sd_SetOpacity(new_opacity as num)
|
||||||
/* if(opacity != new_opacity)
|
/* if(opacity != new_opacity)
|
||||||
var/list/affected = sd_StripLocalLum()
|
var/list/affected = sd_StripLocalLum()
|
||||||
opacity = new_opacity
|
opacity = new_opacity
|
||||||
sd_ApplyLocalLum(affected) */
|
sd_ApplyLocalLum(affected) */
|
||||||
if(opacity == (new_opacity ? 1 : 0)) return
|
if(opacity == (new_opacity ? 1 : 0)) return
|
||||||
var
|
var
|
||||||
list
|
list
|
||||||
affected = new
|
|
||||||
//spill
|
|
||||||
atom/A
|
|
||||||
turf
|
|
||||||
T
|
|
||||||
ATurf
|
|
||||||
affected = new
|
affected = new
|
||||||
for(A in range(sd_top_luminosity,src))
|
//spill
|
||||||
T = A
|
atom/A
|
||||||
while(T && !istype(T)) T = T.loc
|
turf
|
||||||
if(T)
|
T
|
||||||
var/list/V = view(A.luminosity,T)
|
ATurf
|
||||||
if(!(src in V)) continue
|
affected = new
|
||||||
var/turfflag = 0
|
for(A in range(sd_top_luminosity,src))
|
||||||
if(A == T) turfflag = 1
|
T = A
|
||||||
if(A.luminosity && get_dist(A,src)<=A.luminosity+turfflag)
|
while(T && !istype(T)) T = T.loc
|
||||||
affected[A] = V
|
if(T)
|
||||||
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
var/list/V = view(A.luminosity,T)
|
||||||
// if(!spill) spill=new
|
if(!(src in V)) continue
|
||||||
// spill[A] = view(sd_light_outside, T)
|
var/turfflag = 0
|
||||||
opacity = new_opacity
|
if(A == T) turfflag = 1
|
||||||
if(opacity)
|
if(A.luminosity && get_dist(A,src)<=A.luminosity+turfflag)
|
||||||
for(A in affected)
|
affected[A] = V
|
||||||
ATurf = A
|
//if(sd_light_outside && (A in sd_light_spill_turfs))
|
||||||
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
// if(!spill) spill=new
|
||||||
if(ATurf)
|
// spill[A] = view(sd_light_outside, T)
|
||||||
for(T in affected[A]-view(A.luminosity, ATurf))
|
opacity = new_opacity
|
||||||
T.sd_lumcount -= (A.luminosity-get_dist(A,T))
|
if(opacity)
|
||||||
T.sd_lumcount = max(0, T.sd_lumcount)
|
for(A in affected)
|
||||||
|
ATurf = A
|
||||||
|
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
||||||
|
if(ATurf)
|
||||||
|
for(T in affected[A]-view(A.luminosity, ATurf))
|
||||||
|
T.sd_lumcount -= (A.luminosity-get_dist(A,T))
|
||||||
|
T.sd_lumcount = max(0, T.sd_lumcount)
|
||||||
|
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc(1)-([A.luminosity-get_dist(A,T)]) from [A] ([A.x],[A.y])"
|
// slog << "\red lc(1)-([A.luminosity-get_dist(A,T)]) from [A] ([A.x],[A.y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
|
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
/*
|
/*
|
||||||
for(A in spill)
|
for(A in spill)
|
||||||
if(A.opacity && A!=src) continue
|
if(A.opacity && A!=src) continue
|
||||||
ATurf = A
|
ATurf = A
|
||||||
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
||||||
if(ATurf)
|
if(ATurf)
|
||||||
//spill[A] -= view(sd_light_outside, A)
|
//spill[A] -= view(sd_light_outside, A)
|
||||||
for(T in (A==src)?spill[A]:(spill[A]-view(sd_light_outside,ATurf)))
|
for(T in (A==src)?spill[A]:(spill[A]-view(sd_light_outside,ATurf)))
|
||||||
if(T.loc:sd_outside) continue
|
if(T.loc:sd_outside) continue
|
||||||
T.sd_lumcount -= (sd_light_outside-get_dist(A,T))
|
T.sd_lumcount -= (sd_light_outside-get_dist(A,T))
|
||||||
|
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc(O)-([sd_light_outside-get_dist(A,T)]) from [A] ([A:x],[A:y])"
|
// slog << "\red lc(O)-([sd_light_outside-get_dist(A,T)]) from [A] ([A:x],[A:y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
|
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// end new_opacity = 1 block
|
// end new_opacity = 1 block
|
||||||
|
|
||||||
else
|
else
|
||||||
for(A in affected)
|
for(A in affected)
|
||||||
ATurf = A
|
ATurf = A
|
||||||
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
||||||
if(ATurf)
|
if(ATurf)
|
||||||
for(T in view(A.luminosity, ATurf) - affected[A])
|
for(T in view(A.luminosity, ATurf) - affected[A])
|
||||||
T.sd_lumcount += (A.luminosity-get_dist(A,T))
|
T.sd_lumcount += (A.luminosity-get_dist(A,T))
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc(1)+([A.luminosity-get_dist(A,T)]) from [A] ([A.x],[A.y])"
|
// slog << "\red lc(1)+([A.luminosity-get_dist(A,T)]) from [A] ([A.x],[A.y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
/*
|
/*
|
||||||
for(A in spill)
|
for(A in spill)
|
||||||
if(A.opacity) continue
|
if(A.opacity) continue
|
||||||
ATurf = A
|
ATurf = A
|
||||||
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
while(ATurf && !istype(ATurf)) ATurf = ATurf.loc
|
||||||
if(ATurf)
|
if(ATurf)
|
||||||
for(T in (A==src)?spill[A]:(view(sd_light_outside, ATurf)-spill[A]))
|
for(T in (A==src)?spill[A]:(view(sd_light_outside, ATurf)-spill[A]))
|
||||||
if(T.loc:sd_outside) continue
|
if(T.loc:sd_outside) continue
|
||||||
T.sd_lumcount += (sd_light_outside-get_dist(A,T))
|
T.sd_lumcount += (sd_light_outside-get_dist(A,T))
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc(O)+([sd_light_outside-get_dist(A,T)]) from [A] ([A:x],[A:y])"
|
// slog << "\red lc(O)+([sd_light_outside-get_dist(A,T)]) from [A] ([A:x],[A:y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
|
|
||||||
*/
|
*/
|
||||||
// end new_opacity = 0 block
|
// end new_opacity = 0 block
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|
||||||
sd_NewOpacity(var/new_opacity)
|
atom/proc/sd_NewOpacity(var/new_opacity)
|
||||||
if(opacity != new_opacity)
|
if(opacity != new_opacity)
|
||||||
var/list/affected = sd_StripLocalLum()
|
var/list/affected = sd_StripLocalLum()
|
||||||
opacity = new_opacity
|
opacity = new_opacity
|
||||||
var/atom/T = src
|
var/atom/T = src
|
||||||
while(T && !isturf(T))
|
while(T && !isturf(T))
|
||||||
T = T.loc
|
T = T.loc
|
||||||
if(T)
|
if(T)
|
||||||
T:sd_lumcount = 0
|
T:sd_lumcount = 0
|
||||||
|
|
||||||
sd_ApplyLocalLum(affected)
|
sd_ApplyLocalLum(affected)
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|
||||||
turf
|
turf
|
||||||
var
|
var/sd_light_spill = 0
|
||||||
// set to 1 to have outside light spill indoors from this turf
|
var/tmp/sd_lumcount = 0 // the brightness of the turf
|
||||||
sd_light_spill = 0
|
|
||||||
tmp
|
|
||||||
sd_lumcount = 0 // the brightness of the turf
|
|
||||||
|
|
||||||
proc
|
|
||||||
sd_LumReset()
|
|
||||||
/* Clear local lum, reset this turf's sd_lumcount, and
|
|
||||||
re-apply local lum*/
|
|
||||||
var/list/affected = sd_StripLocalLum()
|
|
||||||
sd_lumcount = 0
|
|
||||||
//if(src.tag == "sdd")
|
|
||||||
// slog << "\red lc(LR)=0"
|
|
||||||
|
|
||||||
sd_ApplyLocalLum(affected)
|
turf/proc/sd_LumReset()
|
||||||
|
/* Clear local lum, reset this turf's sd_lumcount, and
|
||||||
|
re-apply local lum*/
|
||||||
|
var/list/affected = sd_StripLocalLum()
|
||||||
|
sd_lumcount = 0
|
||||||
|
//if(src.tag == "sdd")
|
||||||
|
// slog << "\red lc(LR)=0"
|
||||||
|
|
||||||
sd_LumUpdate()
|
sd_ApplyLocalLum(affected)
|
||||||
set background = 1
|
|
||||||
var/area/Loc = loc
|
|
||||||
if(!istype(Loc) || !Loc.sd_lighting) return
|
|
||||||
|
|
||||||
// change the turf's area depending on its brightness
|
turf/proc/sd_LumUpdate()
|
||||||
// restrict light to valid levels
|
set background = 1
|
||||||
var/light = min(max(sd_lumcount,0),sd_dark_shades)
|
var/area/Loc = loc
|
||||||
var/ltag = copytext(Loc.tag,1,findtext(Loc.tag,"sd_L")) + "sd_L[light]"
|
if(!istype(Loc) || !Loc.sd_lighting) return
|
||||||
|
|
||||||
if(Loc.tag!=ltag) //skip if already in this area
|
// change the turf's area depending on its brightness
|
||||||
var/area/A = locate(ltag) // find an appropriate area
|
// restrict light to valid levels
|
||||||
if(!A)
|
var/light = min(max(sd_lumcount,0),sd_dark_shades)
|
||||||
A = new Loc.type() // create area if it wasn't found
|
var/ltag = copytext(Loc.tag,1,findtext(Loc.tag,"sd_L")) + "sd_L[light]"
|
||||||
A.tag = ltag
|
|
||||||
|
|
||||||
// replicate vars
|
if(Loc.tag!=ltag) //skip if already in this area
|
||||||
for(var/V in Loc.vars-"contents")
|
var/area/A = locate(ltag) // find an appropriate area
|
||||||
if(issaved(Loc.vars[V])) A.vars[V] = Loc.vars[V]
|
if(!A)
|
||||||
|
A = new Loc.type() // create area if it wasn't found
|
||||||
|
A.tag = ltag
|
||||||
|
|
||||||
|
// replicate vars
|
||||||
|
for(var/V in Loc.vars-"contents")
|
||||||
|
if(issaved(Loc.vars[V])) A.vars[V] = Loc.vars[V]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
A.tag = ltag
|
A.tag = ltag
|
||||||
/*
|
/*
|
||||||
if(A.sd_outside)
|
if(A.sd_outside)
|
||||||
if(!(A in sd_outside_areas))
|
if(!(A in sd_outside_areas))
|
||||||
sd_outside_areas += A
|
sd_outside_areas += A
|
||||||
A.sd_light_level = light
|
A.sd_light_level = light
|
||||||
A.sd_LightLevel(light + sd_light_outside,0)
|
A.sd_LightLevel(light + sd_light_outside,0)
|
||||||
else
|
else
|
||||||
*/
|
*/
|
||||||
A.sd_LightLevel(light)
|
A.sd_LightLevel(light)
|
||||||
// endelse
|
// endelse
|
||||||
|
|
||||||
A.contents += src // move the turf into the area
|
A.contents += src // move the turf into the area
|
||||||
/*
|
/*
|
||||||
sd_ApplySpill()
|
turf/proc/sd_ApplySpill()
|
||||||
if(opacity) return
|
if(opacity) return
|
||||||
var/oldlum = luminosity
|
var/oldlum = luminosity
|
||||||
luminosity = sd_light_outside
|
luminosity = sd_light_outside
|
||||||
// loop through all the turfs in V
|
// loop through all the turfs in V
|
||||||
for(var/turf/T in view(sd_light_outside,src))
|
for(var/turf/T in view(sd_light_outside,src))
|
||||||
var/area/A = T.loc
|
var/area/A = T.loc
|
||||||
if(!istype(A) || A.sd_outside) continue
|
if(!istype(A) || A.sd_outside) continue
|
||||||
/* increase the turf's brightness depending on the
|
/* increase the turf's brightness depending on the
|
||||||
brightness and distance of the lightsource */
|
brightness and distance of the lightsource */
|
||||||
T.sd_lumcount += (sd_light_outside-get_dist(src,T))
|
T.sd_lumcount += (sd_light_outside-get_dist(src,T))
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc(AS)+([sd_light_outside-get_dist(src,T)]) from [src] ([src:x],[src:y])"
|
// slog << "\red lc(AS)+([sd_light_outside-get_dist(src,T)]) from [src] ([src:x],[src:y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
// update the turf's area
|
// update the turf's area
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
luminosity = oldlum
|
luminosity = oldlum
|
||||||
|
|
||||||
sd_StripSpill()
|
turf/proc/sd_StripSpill()
|
||||||
if(opacity) return
|
if(opacity) return
|
||||||
var/oldlum = luminosity
|
var/oldlum = luminosity
|
||||||
luminosity = sd_light_outside
|
luminosity = sd_light_outside
|
||||||
// loop through all the turfs in V
|
// loop through all the turfs in V
|
||||||
for(var/turf/T in view(sd_light_outside,src))
|
for(var/turf/T in view(sd_light_outside,src))
|
||||||
var/area/A = T.loc
|
var/area/A = T.loc
|
||||||
if(!istype(A) || A.sd_outside) continue
|
if(!istype(A) || A.sd_outside) continue
|
||||||
/* increase the turf's brightness depending on the
|
/* increase the turf's brightness depending on the
|
||||||
brightness and distance of the lightsource */
|
brightness and distance of the lightsource */
|
||||||
T.sd_lumcount -= (sd_light_outside-get_dist(src,T))
|
T.sd_lumcount -= (sd_light_outside-get_dist(src,T))
|
||||||
//if(T.tag == "sdd")
|
//if(T.tag == "sdd")
|
||||||
// slog << "\red lc(AS)-([sd_light_outside-get_dist(src,T)]) from [src] ([src:x],[src:y])"
|
// slog << "\red lc(AS)-([sd_light_outside-get_dist(src,T)]) from [src] ([src:x],[src:y])"
|
||||||
// slog << "now [T.sd_lumcount]"
|
// slog << "now [T.sd_lumcount]"
|
||||||
|
|
||||||
// update the turf's area
|
// update the turf's area
|
||||||
T.sd_LumUpdate()
|
T.sd_LumUpdate()
|
||||||
luminosity = oldlum
|
luminosity = oldlum
|
||||||
|
|
||||||
New()
|
turf/New()
|
||||||
..()
|
..()
|
||||||
if(sd_light_spill)
|
if(sd_light_spill)
|
||||||
sd_light_spill_turfs += src
|
sd_light_spill_turfs += src
|
||||||
@@ -684,91 +677,89 @@ atom/movable/Move() // when something moves
|
|||||||
sd_ApplyLum()
|
sd_ApplyLum()
|
||||||
|
|
||||||
area
|
area
|
||||||
var
|
|
||||||
/* Turn this flag off to prevent sd_DynamicAreaLighting from affecting
|
/* Turn this flag off to prevent sd_DynamicAreaLighting from affecting
|
||||||
this area */
|
this area */
|
||||||
sd_lighting = 1
|
var/sd_lighting = 1
|
||||||
|
|
||||||
/* This var determines if an area is outside (affected by sunlight) or
|
/* This var determines if an area is outside (affected by sunlight) or
|
||||||
not. */
|
not. */
|
||||||
sd_outside = 0
|
var/sd_outside = 0
|
||||||
|
|
||||||
sd_light_level = 0 // the current light level of the area
|
var/sd_light_level = 0 // the current light level of the area
|
||||||
|
|
||||||
sd_darkimage // tracks the darkness image of the area for easy removal
|
var/sd_darkimage // tracks the darkness image of the area for easy removal
|
||||||
|
|
||||||
|
|
||||||
proc
|
area/proc/sd_LightLevel(slevel = sd_light_level as num, keep = 1)
|
||||||
sd_LightLevel(slevel = sd_light_level as num, keep = 1)
|
if(!src) return
|
||||||
if(!src) return
|
overlays -= sd_darkimage
|
||||||
overlays -= sd_darkimage
|
|
||||||
|
|
||||||
if(keep) sd_light_level = slevel
|
if(keep) sd_light_level = slevel
|
||||||
|
|
||||||
slevel = min(max(slevel,0),sd_dark_shades) // restrict range
|
slevel = min(max(slevel,0),sd_dark_shades) // restrict range
|
||||||
|
|
||||||
if(slevel > 0)
|
if(slevel > 0)
|
||||||
luminosity = 1
|
luminosity = 1
|
||||||
else
|
else
|
||||||
luminosity = 0
|
luminosity = 0
|
||||||
|
|
||||||
sd_darkimage = image(sd_dark_icon,,num2text(slevel),sd_light_layer)
|
sd_darkimage = image(sd_dark_icon,,num2text(slevel),sd_light_layer)
|
||||||
overlays += sd_darkimage
|
overlays += sd_darkimage
|
||||||
|
|
||||||
/*
|
/*
|
||||||
New()
|
area/proc/New()
|
||||||
..()
|
..()
|
||||||
if(!tag) tag = "[type]"
|
if(!tag) tag = "[type]"
|
||||||
spawn(1) // wait a tick
|
spawn(1) // wait a tick
|
||||||
if(sd_lighting)
|
if(sd_lighting)
|
||||||
// see if this area was created by the library
|
// see if this area was created by the library
|
||||||
if(!findtext(tag, "sd_L"))
|
if(!findtext(tag, "sd_L"))
|
||||||
/* show the dark overlay so areas outside of luminous regions
|
/* show the dark overlay so areas outside of luminous regions
|
||||||
won't be bright as day when they should be dark. */
|
won't be bright as day when they should be dark. */
|
||||||
sd_LightLevel()
|
sd_LightLevel()
|
||||||
if(sd_outside)
|
if(sd_outside)
|
||||||
sd_outside_areas += src
|
sd_outside_areas += src
|
||||||
*/
|
*/
|
||||||
proc/sd_New(sd_created)
|
area/proc/sd_New(sd_created)
|
||||||
|
|
||||||
if(!tag) tag = "[type]"
|
if(!tag) tag = "[type]"
|
||||||
spawn(1) // wait a tick
|
spawn(1) // wait a tick
|
||||||
if(sd_lighting)
|
if(sd_lighting)
|
||||||
// see if this area was created by the library
|
// see if this area was created by the library
|
||||||
if(!sd_created)
|
if(!sd_created)
|
||||||
/* show the dark overlay so areas outside of luminous regions
|
/* show the dark overlay so areas outside of luminous regions
|
||||||
won't be bright as day when they should be dark. */
|
won't be bright as day when they should be dark. */
|
||||||
sd_LightLevel()
|
sd_LightLevel()
|
||||||
//if(sd_outside)
|
//if(sd_outside)
|
||||||
// sd_outside_areas += src
|
// sd_outside_areas += src
|
||||||
|
|
||||||
|
area/Del()
|
||||||
|
..()
|
||||||
|
related -= src
|
||||||
|
|
||||||
Del()
|
|
||||||
..()
|
|
||||||
related -= src
|
|
||||||
|
|
||||||
mob
|
|
||||||
/* extend the mob procs to compensate for sight settings. */
|
/* extend the mob procs to compensate for sight settings. */
|
||||||
sd_ApplyLum(list/V, center = src)
|
mob/sd_ApplyLum(list/V, center = src)
|
||||||
if(!V)
|
if(!V)
|
||||||
if(isturf(loc))
|
if(isturf(loc))
|
||||||
V = view(luminosity,loc)
|
V = view(luminosity,loc)
|
||||||
else
|
else
|
||||||
V = view(luminosity,src)
|
V = view(luminosity,src)
|
||||||
. = ..(V, center)
|
. = ..(V, center)
|
||||||
|
|
||||||
sd_StripLum(list/V, center = src)
|
mob/sd_StripLum(list/V, center = src)
|
||||||
if(!V)
|
if(!V)
|
||||||
if(isturf(loc))
|
if(isturf(loc))
|
||||||
V = view(luminosity,loc)
|
V = view(luminosity,loc)
|
||||||
else
|
else
|
||||||
V = view(luminosity,src)
|
V = view(luminosity,src)
|
||||||
. = ..(V, center)
|
. = ..(V, center)
|
||||||
|
|
||||||
sd_ApplyLocalLum(list/affected)
|
mob/sd_ApplyLocalLum(list/affected)
|
||||||
if(!affected)
|
if(!affected)
|
||||||
if(isturf(loc))
|
if(isturf(loc))
|
||||||
affected = view(sd_top_luminosity,loc)
|
affected = view(sd_top_luminosity,loc)
|
||||||
else
|
else
|
||||||
affected = view(sd_top_luminosity,src)
|
affected = view(sd_top_luminosity,src)
|
||||||
. = ..(affected)
|
. = ..(affected)
|
||||||
|
|
||||||
|
|||||||
@@ -17,127 +17,127 @@
|
|||||||
var/locked = 0
|
var/locked = 0
|
||||||
var/drainratio = 1
|
var/drainratio = 1
|
||||||
|
|
||||||
process()
|
/obj/machinery/power/rad_collector/process()
|
||||||
if(P)
|
if(P)
|
||||||
if(P.air_contents.toxins <= 0)
|
if(P.air_contents.toxins <= 0)
|
||||||
investigate_log("<font color='red'>out of fuel</font>.","singulo")
|
investigate_log("<font color='red'>out of fuel</font>.","singulo")
|
||||||
P.air_contents.toxins = 0
|
P.air_contents.toxins = 0
|
||||||
eject()
|
eject()
|
||||||
else
|
|
||||||
P.air_contents.toxins -= 0.001*drainratio
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
|
||||||
if(anchored)
|
|
||||||
if(!src.locked)
|
|
||||||
toggle_power()
|
|
||||||
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
|
|
||||||
"You turn the [src.name] [active? "on":"off"].")
|
|
||||||
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"<font color='red'>It is empty</font>"].","singulo")
|
|
||||||
return
|
|
||||||
else
|
|
||||||
user << "\red The controls are locked!"
|
|
||||||
return
|
|
||||||
..()
|
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/W, mob/user)
|
|
||||||
if(istype(W, /obj/item/device/analyzer))
|
|
||||||
user << "\blue The [W.name] detects that [last_power]W were recently produced."
|
|
||||||
return 1
|
|
||||||
else if(istype(W, /obj/item/weapon/tank/plasma))
|
|
||||||
if(!src.anchored)
|
|
||||||
user << "\red The [src] needs to be secured to the floor first."
|
|
||||||
return 1
|
|
||||||
if(src.P)
|
|
||||||
user << "\red There's already a plasma tank loaded."
|
|
||||||
return 1
|
|
||||||
user.drop_item()
|
|
||||||
src.P = W
|
|
||||||
W.loc = src
|
|
||||||
updateicon()
|
|
||||||
else if(istype(W, /obj/item/weapon/crowbar))
|
|
||||||
if(P && !src.locked)
|
|
||||||
eject()
|
|
||||||
return 1
|
|
||||||
else if(istype(W, /obj/item/weapon/wrench))
|
|
||||||
if(P)
|
|
||||||
user << "\blue Remove the plasma tank first."
|
|
||||||
return 1
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
src.anchored = !src.anchored
|
|
||||||
user.visible_message("[user.name] [anchored? "secures":"unsecures"] the [src.name].", \
|
|
||||||
"You [anchored? "secure":"undo"] the external bolts.", \
|
|
||||||
"You hear a ratchet")
|
|
||||||
if(anchored)
|
|
||||||
connect_to_network()
|
|
||||||
else
|
|
||||||
disconnect_from_network()
|
|
||||||
else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
|
||||||
if (src.allowed(user))
|
|
||||||
if(active)
|
|
||||||
src.locked = !src.locked
|
|
||||||
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
|
|
||||||
else
|
|
||||||
src.locked = 0 //just in case it somehow gets locked
|
|
||||||
user << "\red The controls can only be locked when the [src] is active"
|
|
||||||
else
|
|
||||||
user << "\red Access denied!"
|
|
||||||
return 1
|
|
||||||
else
|
else
|
||||||
..()
|
P.air_contents.toxins -= 0.001*drainratio
|
||||||
return 1
|
return
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/power/rad_collector/attack_hand(mob/user as mob)
|
||||||
switch(severity)
|
if(anchored)
|
||||||
if(2, 3)
|
if(!src.locked)
|
||||||
eject()
|
|
||||||
return ..()
|
|
||||||
|
|
||||||
|
|
||||||
proc/eject()
|
|
||||||
locked = 0
|
|
||||||
var/obj/item/weapon/tank/plasma/Z = src.P
|
|
||||||
if (!Z)
|
|
||||||
return
|
|
||||||
Z.loc = get_turf(src)
|
|
||||||
Z.layer = initial(Z.layer)
|
|
||||||
src.P = null
|
|
||||||
if(active)
|
|
||||||
toggle_power()
|
toggle_power()
|
||||||
else
|
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
|
||||||
updateicon()
|
"You turn the [src.name] [active? "on":"off"].")
|
||||||
|
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"<font color='red'>It is empty</font>"].","singulo")
|
||||||
proc/receive_pulse(var/pulse_strength)
|
|
||||||
if(P && active)
|
|
||||||
var/power_produced = 0
|
|
||||||
power_produced = P.air_contents.toxins*pulse_strength*20
|
|
||||||
add_avail(power_produced)
|
|
||||||
last_power = power_produced
|
|
||||||
return
|
return
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc/updateicon()
|
|
||||||
overlays = null
|
|
||||||
if(P)
|
|
||||||
overlays += image('icons/obj/singularity.dmi', "ptank")
|
|
||||||
if(stat & (NOPOWER|BROKEN))
|
|
||||||
return
|
|
||||||
if(active)
|
|
||||||
overlays += image('icons/obj/singularity.dmi', "on")
|
|
||||||
|
|
||||||
|
|
||||||
proc/toggle_power()
|
|
||||||
active = !active
|
|
||||||
if(active)
|
|
||||||
icon_state = "ca_on"
|
|
||||||
flick("ca_active", src)
|
|
||||||
else
|
else
|
||||||
icon_state = "ca"
|
user << "\red The controls are locked!"
|
||||||
flick("ca_deactive", src)
|
return
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user)
|
||||||
|
if(istype(W, /obj/item/device/analyzer))
|
||||||
|
user << "\blue The [W.name] detects that [last_power]W were recently produced."
|
||||||
|
return 1
|
||||||
|
else if(istype(W, /obj/item/weapon/tank/plasma))
|
||||||
|
if(!src.anchored)
|
||||||
|
user << "\red The [src] needs to be secured to the floor first."
|
||||||
|
return 1
|
||||||
|
if(src.P)
|
||||||
|
user << "\red There's already a plasma tank loaded."
|
||||||
|
return 1
|
||||||
|
user.drop_item()
|
||||||
|
src.P = W
|
||||||
|
W.loc = src
|
||||||
updateicon()
|
updateicon()
|
||||||
return
|
else if(istype(W, /obj/item/weapon/crowbar))
|
||||||
|
if(P && !src.locked)
|
||||||
|
eject()
|
||||||
|
return 1
|
||||||
|
else if(istype(W, /obj/item/weapon/wrench))
|
||||||
|
if(P)
|
||||||
|
user << "\blue Remove the plasma tank first."
|
||||||
|
return 1
|
||||||
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
|
src.anchored = !src.anchored
|
||||||
|
user.visible_message("[user.name] [anchored? "secures":"unsecures"] the [src.name].", \
|
||||||
|
"You [anchored? "secure":"undo"] the external bolts.", \
|
||||||
|
"You hear a ratchet")
|
||||||
|
if(anchored)
|
||||||
|
connect_to_network()
|
||||||
|
else
|
||||||
|
disconnect_from_network()
|
||||||
|
else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||||
|
if (src.allowed(user))
|
||||||
|
if(active)
|
||||||
|
src.locked = !src.locked
|
||||||
|
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
|
||||||
|
else
|
||||||
|
src.locked = 0 //just in case it somehow gets locked
|
||||||
|
user << "\red The controls can only be locked when the [src] is active"
|
||||||
|
else
|
||||||
|
user << "\red Access denied!"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/rad_collector/ex_act(severity)
|
||||||
|
switch(severity)
|
||||||
|
if(2, 3)
|
||||||
|
eject()
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/rad_collector/proc/eject()
|
||||||
|
locked = 0
|
||||||
|
var/obj/item/weapon/tank/plasma/Z = src.P
|
||||||
|
if (!Z)
|
||||||
|
return
|
||||||
|
Z.loc = get_turf(src)
|
||||||
|
Z.layer = initial(Z.layer)
|
||||||
|
src.P = null
|
||||||
|
if(active)
|
||||||
|
toggle_power()
|
||||||
|
else
|
||||||
|
updateicon()
|
||||||
|
|
||||||
|
/obj/machinery/power/rad_collector/proc/receive_pulse(var/pulse_strength)
|
||||||
|
if(P && active)
|
||||||
|
var/power_produced = 0
|
||||||
|
power_produced = P.air_contents.toxins*pulse_strength*20
|
||||||
|
add_avail(power_produced)
|
||||||
|
last_power = power_produced
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/rad_collector/proc/updateicon()
|
||||||
|
overlays = null
|
||||||
|
if(P)
|
||||||
|
overlays += image('icons/obj/singularity.dmi', "ptank")
|
||||||
|
if(stat & (NOPOWER|BROKEN))
|
||||||
|
return
|
||||||
|
if(active)
|
||||||
|
overlays += image('icons/obj/singularity.dmi', "on")
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/rad_collector/proc/toggle_power()
|
||||||
|
active = !active
|
||||||
|
if(active)
|
||||||
|
icon_state = "ca_on"
|
||||||
|
flick("ca_active", src)
|
||||||
|
else
|
||||||
|
icon_state = "ca"
|
||||||
|
flick("ca_deactive", src)
|
||||||
|
updateicon()
|
||||||
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -13,99 +13,99 @@
|
|||||||
var/obj/machinery/field_generator/FG2 = null
|
var/obj/machinery/field_generator/FG2 = null
|
||||||
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
|
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
|
||||||
|
|
||||||
New()
|
/obj/machinery/containment_field/New()
|
||||||
spawn(1)
|
spawn(1)
|
||||||
src.sd_SetLuminosity(5)
|
src.sd_SetLuminosity(5)
|
||||||
|
|
||||||
|
|
||||||
Del()
|
/obj/machinery/containment_field/Del()
|
||||||
if(FG1 && !FG1.clean_up)
|
if(FG1 && !FG1.clean_up)
|
||||||
FG1.cleanup()
|
FG1.cleanup()
|
||||||
if(FG2 && !FG2.clean_up)
|
if(FG2 && !FG2.clean_up)
|
||||||
FG2.cleanup()
|
FG2.cleanup()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
/obj/machinery/containment_field/attack_hand(mob/user as mob)
|
||||||
if(get_dist(src, user) > 1)
|
if(get_dist(src, user) > 1)
|
||||||
return 0
|
|
||||||
else
|
|
||||||
shock(user)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
|
||||||
return 0
|
return 0
|
||||||
|
else
|
||||||
|
shock(user)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/containment_field/blob_act()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/containment_field/ex_act(severity)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/containment_field/HasProximity(atom/movable/AM as mob|obj)
|
||||||
|
if(istype(AM,/mob/living/silicon) && prob(40))
|
||||||
|
shock(AM)
|
||||||
|
return 1
|
||||||
|
if(istype(AM,/mob/living/carbon) && prob(50))
|
||||||
|
shock(AM)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/containment_field/proc/shock(mob/living/user as mob)
|
||||||
|
if(hasShocked)
|
||||||
return 0
|
return 0
|
||||||
|
if(!FG1 || !FG2)
|
||||||
|
del(src)
|
||||||
HasProximity(atom/movable/AM as mob|obj)
|
|
||||||
if(istype(AM,/mob/living/silicon) && prob(40))
|
|
||||||
shock(AM)
|
|
||||||
return 1
|
|
||||||
if(istype(AM,/mob/living/carbon) && prob(50))
|
|
||||||
shock(AM)
|
|
||||||
return 1
|
|
||||||
return 0
|
return 0
|
||||||
|
if(iscarbon(user))
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
s.set_up(5, 1, user.loc)
|
||||||
|
s.start()
|
||||||
|
|
||||||
|
hasShocked = 1
|
||||||
|
var/shock_damage = min(rand(30,40),rand(30,40))
|
||||||
|
user.burn_skin(shock_damage)
|
||||||
|
user.updatehealth()
|
||||||
|
user.visible_message("\red [user.name] was shocked by the [src.name]!", \
|
||||||
|
"\red <B>You feel a powerful shock course through your body sending you flying!</B>", \
|
||||||
|
"\red You hear a heavy electrical crack")
|
||||||
|
|
||||||
proc
|
var/stun = min(shock_damage, 15)
|
||||||
shock(mob/living/user as mob)
|
user.Stun(stun)
|
||||||
if(hasShocked)
|
user.Weaken(10)
|
||||||
return 0
|
|
||||||
if(!FG1 || !FG2)
|
|
||||||
del(src)
|
|
||||||
return 0
|
|
||||||
if(iscarbon(user))
|
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
|
||||||
s.set_up(5, 1, user.loc)
|
|
||||||
s.start()
|
|
||||||
|
|
||||||
hasShocked = 1
|
user.updatehealth()
|
||||||
var/shock_damage = min(rand(30,40),rand(30,40))
|
var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
|
||||||
user.burn_skin(shock_damage)
|
user.throw_at(target, 200, 4)
|
||||||
user.updatehealth()
|
|
||||||
user.visible_message("\red [user.name] was shocked by the [src.name]!", \
|
|
||||||
"\red <B>You feel a powerful shock course through your body sending you flying!</B>", \
|
|
||||||
"\red You hear a heavy electrical crack")
|
|
||||||
|
|
||||||
var/stun = min(shock_damage, 15)
|
sleep(20)
|
||||||
user.Stun(stun)
|
hasShocked = 0
|
||||||
user.Weaken(10)
|
return
|
||||||
|
|
||||||
user.updatehealth()
|
else if(issilicon(user))
|
||||||
var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
user.throw_at(target, 200, 4)
|
s.set_up(5, 1, user.loc)
|
||||||
|
s.start()
|
||||||
|
|
||||||
sleep(20)
|
hasShocked = 1
|
||||||
hasShocked = 0
|
var/shock_damage = rand(15,30)
|
||||||
return
|
user.take_overall_damage(0,shock_damage)
|
||||||
|
user.visible_message("\red [user.name] was shocked by the [src.name]!", \
|
||||||
|
"\red <B>Energy pulse detected, system damaged!</B>", \
|
||||||
|
"\red You hear an electrical crack")
|
||||||
|
if(prob(20))
|
||||||
|
user.Stun(2)
|
||||||
|
|
||||||
else if(issilicon(user))
|
sleep(20)
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
hasShocked = 0
|
||||||
s.set_up(5, 1, user.loc)
|
return
|
||||||
s.start()
|
|
||||||
|
|
||||||
hasShocked = 1
|
return
|
||||||
var/shock_damage = rand(15,30)
|
|
||||||
user.take_overall_damage(0,shock_damage)
|
|
||||||
user.visible_message("\red [user.name] was shocked by the [src.name]!", \
|
|
||||||
"\red <B>Energy pulse detected, system damaged!</B>", \
|
|
||||||
"\red You hear an electrical crack")
|
|
||||||
if(prob(20))
|
|
||||||
user.Stun(2)
|
|
||||||
|
|
||||||
sleep(20)
|
/obj/machinery/containment_field/proc/set_master(var/master1,var/master2)
|
||||||
hasShocked = 0
|
if(!master1 || !master2)
|
||||||
return
|
return 0
|
||||||
|
FG1 = master1
|
||||||
return
|
FG2 = master2
|
||||||
|
return 1
|
||||||
set_master(var/master1,var/master2)
|
|
||||||
if(!master1 || !master2)
|
|
||||||
return 0
|
|
||||||
FG1 = master1
|
|
||||||
FG2 = master2
|
|
||||||
return 1
|
|
||||||
|
|||||||
@@ -21,192 +21,192 @@
|
|||||||
var/locked = 0
|
var/locked = 0
|
||||||
|
|
||||||
|
|
||||||
verb/rotate()
|
/obj/machinery/emitter/verb/rotate()
|
||||||
set name = "Rotate"
|
set name = "Rotate"
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
set src in oview(1)
|
set src in oview(1)
|
||||||
|
|
||||||
if (src.anchored || usr:stat)
|
if (src.anchored || usr:stat)
|
||||||
usr << "It is fastened to the floor!"
|
usr << "It is fastened to the floor!"
|
||||||
return 0
|
return 0
|
||||||
src.dir = turn(src.dir, 90)
|
src.dir = turn(src.dir, 90)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/emitter/New()
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
Del()
|
/obj/machinery/emitter/Del()
|
||||||
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")
|
investigate_log("<font color='red'>deleted</font> at ([x],[y],[z])","singulo")
|
||||||
..()
|
..()
|
||||||
|
|
||||||
update_icon()
|
/obj/machinery/emitter/update_icon()
|
||||||
if (active && !(stat & (NOPOWER|BROKEN)))
|
if (active && !(stat & (NOPOWER|BROKEN)))
|
||||||
icon_state = "emitter_+a"
|
icon_state = "emitter_+a"
|
||||||
else
|
else
|
||||||
icon_state = "emitter"
|
icon_state = "emitter"
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
/obj/machinery/emitter/attack_hand(mob/user as mob)
|
||||||
src.add_fingerprint(user)
|
src.add_fingerprint(user)
|
||||||
if(state == 2)
|
if(state == 2)
|
||||||
if(!src.locked)
|
if(!src.locked)
|
||||||
if(src.active==1)
|
if(src.active==1)
|
||||||
src.active = 0
|
|
||||||
user << "You turn off the [src]."
|
|
||||||
src.use_power = 1
|
|
||||||
investigate_log("turned <font color='red'>off</font> by [user.key]","singulo")
|
|
||||||
else
|
|
||||||
src.active = 1
|
|
||||||
user << "You turn on the [src]."
|
|
||||||
src.shot_number = 0
|
|
||||||
src.fire_delay = 100
|
|
||||||
src.use_power = 2
|
|
||||||
investigate_log("turned <font color='green'>on</font> by [user.key]","singulo")
|
|
||||||
update_icon()
|
|
||||||
else
|
|
||||||
user << "\red The controls are locked!"
|
|
||||||
else
|
|
||||||
user << "\red The [src] needs to be firmly secured to the floor first."
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
emp_act(var/severity)//Emitters are hardened but still might have issues
|
|
||||||
use_power(50)
|
|
||||||
if((severity == 1)&&prob(1)&&prob(1))
|
|
||||||
if(src.active)
|
|
||||||
src.active = 0
|
src.active = 0
|
||||||
|
user << "You turn off the [src]."
|
||||||
src.use_power = 1
|
src.use_power = 1
|
||||||
|
investigate_log("turned <font color='red'>off</font> by [user.key]","singulo")
|
||||||
|
else
|
||||||
|
src.active = 1
|
||||||
|
user << "You turn on the [src]."
|
||||||
|
src.shot_number = 0
|
||||||
|
src.fire_delay = 100
|
||||||
|
src.use_power = 2
|
||||||
|
investigate_log("turned <font color='green'>on</font> by [user.key]","singulo")
|
||||||
|
update_icon()
|
||||||
|
else
|
||||||
|
user << "\red The controls are locked!"
|
||||||
|
else
|
||||||
|
user << "\red The [src] needs to be firmly secured to the floor first."
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
process()
|
/obj/machinery/emitter/emp_act(var/severity)//Emitters are hardened but still might have issues
|
||||||
if(stat & (NOPOWER|BROKEN))
|
use_power(50)
|
||||||
return
|
if((severity == 1)&&prob(1)&&prob(1))
|
||||||
if(src.state != 2)
|
if(src.active)
|
||||||
src.active = 0
|
src.active = 0
|
||||||
|
src.use_power = 1
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/emitter/process()
|
||||||
|
if(stat & (NOPOWER|BROKEN))
|
||||||
|
return
|
||||||
|
if(src.state != 2)
|
||||||
|
src.active = 0
|
||||||
|
return
|
||||||
|
if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1))
|
||||||
|
src.last_shot = world.time
|
||||||
|
if(src.shot_number < 3)
|
||||||
|
src.fire_delay = 2
|
||||||
|
src.shot_number ++
|
||||||
|
else
|
||||||
|
src.fire_delay = rand(20,100)
|
||||||
|
src.shot_number = 0
|
||||||
|
use_power(1000)
|
||||||
|
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
||||||
|
playsound(src.loc, 'emitter.ogg', 25, 1)
|
||||||
|
if(prob(35))
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
s.set_up(5, 1, src)
|
||||||
|
s.start()
|
||||||
|
A.dir = src.dir
|
||||||
|
if(src.dir == 1)//Up
|
||||||
|
A.yo = 20
|
||||||
|
A.xo = 0
|
||||||
|
else if(src.dir == 2)//Down
|
||||||
|
A.yo = -20
|
||||||
|
A.xo = 0
|
||||||
|
else if(src.dir == 4)//Right
|
||||||
|
A.yo = 0
|
||||||
|
A.xo = 20
|
||||||
|
else if(src.dir == 8)//Left
|
||||||
|
A.yo = 0
|
||||||
|
A.xo = -20
|
||||||
|
else // Any other
|
||||||
|
A.yo = -20
|
||||||
|
A.xo = 0
|
||||||
|
A.process()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/emitter/attackby(obj/item/W, mob/user)
|
||||||
|
|
||||||
|
if(istype(W, /obj/item/weapon/wrench))
|
||||||
|
if(active)
|
||||||
|
user << "Turn off the [src] first."
|
||||||
return
|
return
|
||||||
if(((src.last_shot + src.fire_delay) <= world.time) && (src.active == 1))
|
switch(state)
|
||||||
src.last_shot = world.time
|
if(0)
|
||||||
if(src.shot_number < 3)
|
state = 1
|
||||||
src.fire_delay = 2
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
src.shot_number ++
|
user.visible_message("[user.name] secures [src.name] to the floor.", \
|
||||||
else
|
"You secure the external reinforcing bolts to the floor.", \
|
||||||
src.fire_delay = rand(20,100)
|
"You hear a ratchet")
|
||||||
src.shot_number = 0
|
src.anchored = 1
|
||||||
use_power(1000)
|
if(1)
|
||||||
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
|
state = 0
|
||||||
playsound(src.loc, 'emitter.ogg', 25, 1)
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
if(prob(35))
|
user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
"You undo the external reinforcing bolts.", \
|
||||||
s.set_up(5, 1, src)
|
"You hear a ratchet")
|
||||||
s.start()
|
src.anchored = 0
|
||||||
A.dir = src.dir
|
if(2)
|
||||||
if(src.dir == 1)//Up
|
user << "\red The [src.name] needs to be unwelded from the floor."
|
||||||
A.yo = 20
|
return
|
||||||
A.xo = 0
|
|
||||||
else if(src.dir == 2)//Down
|
|
||||||
A.yo = -20
|
|
||||||
A.xo = 0
|
|
||||||
else if(src.dir == 4)//Right
|
|
||||||
A.yo = 0
|
|
||||||
A.xo = 20
|
|
||||||
else if(src.dir == 8)//Left
|
|
||||||
A.yo = 0
|
|
||||||
A.xo = -20
|
|
||||||
else // Any other
|
|
||||||
A.yo = -20
|
|
||||||
A.xo = 0
|
|
||||||
A.process()
|
|
||||||
|
|
||||||
|
if(istype(W, /obj/item/weapon/weldingtool))
|
||||||
attackby(obj/item/W, mob/user)
|
var/obj/item/weapon/weldingtool/WT = W
|
||||||
|
if(active)
|
||||||
if(istype(W, /obj/item/weapon/wrench))
|
user << "Turn off the [src] first."
|
||||||
if(active)
|
|
||||||
user << "Turn off the [src] first."
|
|
||||||
return
|
|
||||||
switch(state)
|
|
||||||
if(0)
|
|
||||||
state = 1
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
user.visible_message("[user.name] secures [src.name] to the floor.", \
|
|
||||||
"You secure the external reinforcing bolts to the floor.", \
|
|
||||||
"You hear a ratchet")
|
|
||||||
src.anchored = 1
|
|
||||||
if(1)
|
|
||||||
state = 0
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \
|
|
||||||
"You undo the external reinforcing bolts.", \
|
|
||||||
"You hear a ratchet")
|
|
||||||
src.anchored = 0
|
|
||||||
if(2)
|
|
||||||
user << "\red The [src.name] needs to be unwelded from the floor."
|
|
||||||
return
|
return
|
||||||
|
switch(state)
|
||||||
if(istype(W, /obj/item/weapon/weldingtool))
|
if(0)
|
||||||
var/obj/item/weapon/weldingtool/WT = W
|
user << "\red The [src.name] needs to be wrenched to the floor."
|
||||||
if(active)
|
if(1)
|
||||||
user << "Turn off the [src] first."
|
if (WT.remove_fuel(0,user))
|
||||||
return
|
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
||||||
switch(state)
|
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
||||||
if(0)
|
"You start to weld the [src] to the floor.", \
|
||||||
user << "\red The [src.name] needs to be wrenched to the floor."
|
"You hear welding")
|
||||||
if(1)
|
if (do_after(user,20))
|
||||||
if (WT.remove_fuel(0,user))
|
if(!src || !WT.isOn()) return
|
||||||
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
state = 2
|
||||||
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
user << "You weld the [src] to the floor."
|
||||||
"You start to weld the [src] to the floor.", \
|
|
||||||
"You hear welding")
|
|
||||||
if (do_after(user,20))
|
|
||||||
if(!src || !WT.isOn()) return
|
|
||||||
state = 2
|
|
||||||
user << "You weld the [src] to the floor."
|
|
||||||
else
|
|
||||||
user << "\red You need more welding fuel to complete this task."
|
|
||||||
if(2)
|
|
||||||
if (WT.remove_fuel(0,user))
|
|
||||||
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
|
||||||
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
|
||||||
"You start to cut the [src] free from the floor.", \
|
|
||||||
"You hear welding")
|
|
||||||
if (do_after(user,20))
|
|
||||||
if(!src || !WT.isOn()) return
|
|
||||||
state = 1
|
|
||||||
user << "You cut the [src] free from the floor."
|
|
||||||
else
|
|
||||||
user << "\red You need more welding fuel to complete this task."
|
|
||||||
return
|
|
||||||
|
|
||||||
if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
|
|
||||||
if(emagged)
|
|
||||||
user << "\red The lock seems to be broken"
|
|
||||||
return
|
|
||||||
if(src.allowed(user))
|
|
||||||
if(active)
|
|
||||||
src.locked = !src.locked
|
|
||||||
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
|
|
||||||
else
|
else
|
||||||
src.locked = 0 //just in case it somehow gets locked
|
user << "\red You need more welding fuel to complete this task."
|
||||||
user << "\red The controls can only be locked when the [src] is online"
|
if(2)
|
||||||
|
if (WT.remove_fuel(0,user))
|
||||||
|
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
||||||
|
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
||||||
|
"You start to cut the [src] free from the floor.", \
|
||||||
|
"You hear welding")
|
||||||
|
if (do_after(user,20))
|
||||||
|
if(!src || !WT.isOn()) return
|
||||||
|
state = 1
|
||||||
|
user << "You cut the [src] free from the floor."
|
||||||
|
else
|
||||||
|
user << "\red You need more welding fuel to complete this task."
|
||||||
|
return
|
||||||
|
|
||||||
|
if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
|
||||||
|
if(emagged)
|
||||||
|
user << "\red The lock seems to be broken"
|
||||||
|
return
|
||||||
|
if(src.allowed(user))
|
||||||
|
if(active)
|
||||||
|
src.locked = !src.locked
|
||||||
|
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
|
||||||
else
|
else
|
||||||
user << "\red Access denied."
|
src.locked = 0 //just in case it somehow gets locked
|
||||||
return
|
user << "\red The controls can only be locked when the [src] is online"
|
||||||
|
else
|
||||||
|
user << "\red Access denied."
|
||||||
if(istype(W, /obj/item/weapon/card/emag) && !emagged)
|
|
||||||
locked = 0
|
|
||||||
emagged = 1
|
|
||||||
user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
|
|
||||||
return
|
|
||||||
|
|
||||||
..()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
power_change()
|
if(istype(W, /obj/item/weapon/card/emag) && !emagged)
|
||||||
..()
|
locked = 0
|
||||||
update_icon()
|
emagged = 1
|
||||||
|
user.visible_message("[user.name] emags the [src.name].","\red You short out the lock.")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/emitter/power_change()
|
||||||
|
..()
|
||||||
|
update_icon()
|
||||||
|
return
|
||||||
|
|||||||
@@ -33,318 +33,318 @@ field_generator power level display
|
|||||||
var/clean_up = 0
|
var/clean_up = 0
|
||||||
|
|
||||||
|
|
||||||
update_icon()
|
/obj/machinery/field_generator/update_icon()
|
||||||
overlays = null
|
overlays = null
|
||||||
if(!active)
|
if(!active)
|
||||||
if(warming_up)
|
if(warming_up)
|
||||||
overlays += "+a[warming_up]"
|
overlays += "+a[warming_up]"
|
||||||
if(fields.len)
|
if(fields.len)
|
||||||
overlays += "+on"
|
overlays += "+on"
|
||||||
// Power level indicator
|
// Power level indicator
|
||||||
// Scale % power to % num_power_levels and truncate value
|
// Scale % power to % num_power_levels and truncate value
|
||||||
var/level = round(num_power_levels * power / field_generator_max_power)
|
var/level = round(num_power_levels * power / field_generator_max_power)
|
||||||
// Clamp between 0 and num_power_levels for out of range power values
|
// Clamp between 0 and num_power_levels for out of range power values
|
||||||
level = between(0, level, num_power_levels)
|
level = between(0, level, num_power_levels)
|
||||||
if(level)
|
if(level)
|
||||||
overlays += "+p[level]"
|
overlays += "+p[level]"
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/field_generator/New()
|
||||||
..()
|
..()
|
||||||
fields = list()
|
fields = list()
|
||||||
connected_gens = list()
|
connected_gens = list()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
process()
|
/obj/machinery/field_generator/process()
|
||||||
if(Varedit_start == 1)
|
if(Varedit_start == 1)
|
||||||
if(active == 0)
|
if(active == 0)
|
||||||
active = 1
|
|
||||||
state = 2
|
|
||||||
power = field_generator_max_power
|
|
||||||
anchored = 1
|
|
||||||
warming_up = 3
|
|
||||||
start_fields()
|
|
||||||
update_icon()
|
|
||||||
Varedit_start = 0
|
|
||||||
|
|
||||||
if(src.active == 2)
|
|
||||||
calc_power()
|
|
||||||
update_icon()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
|
||||||
if(state == 2)
|
|
||||||
if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on
|
|
||||||
if(src.active >= 1)
|
|
||||||
user << "You are unable to turn off the [src.name] once it is online."
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
user.visible_message("[user.name] turns on the [src.name]", \
|
|
||||||
"You turn on the [src.name].", \
|
|
||||||
"You hear heavy droning")
|
|
||||||
turn_on()
|
|
||||||
investigate_log("<font color='green'>activated</font> by [user.key].","singulo")
|
|
||||||
|
|
||||||
src.add_fingerprint(user)
|
|
||||||
else
|
|
||||||
user << "The [src] needs to be firmly secured to the floor first."
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/W, mob/user)
|
|
||||||
if(active)
|
|
||||||
user << "The [src] needs to be off."
|
|
||||||
return
|
|
||||||
else if(istype(W, /obj/item/weapon/wrench))
|
|
||||||
switch(state)
|
|
||||||
if(0)
|
|
||||||
state = 1
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
user.visible_message("[user.name] secures [src.name] to the floor.", \
|
|
||||||
"You secure the external reinforcing bolts to the floor.", \
|
|
||||||
"You hear ratchet")
|
|
||||||
src.anchored = 1
|
|
||||||
if(1)
|
|
||||||
state = 0
|
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
|
||||||
user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \
|
|
||||||
"You undo the external reinforcing bolts.", \
|
|
||||||
"You hear ratchet")
|
|
||||||
src.anchored = 0
|
|
||||||
if(2)
|
|
||||||
user << "\red The [src.name] needs to be unwelded from the floor."
|
|
||||||
return
|
|
||||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
|
||||||
var/obj/item/weapon/weldingtool/WT = W
|
|
||||||
switch(state)
|
|
||||||
if(0)
|
|
||||||
user << "\red The [src.name] needs to be wrenched to the floor."
|
|
||||||
return
|
|
||||||
if(1)
|
|
||||||
if (WT.remove_fuel(0,user))
|
|
||||||
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
|
||||||
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
|
||||||
"You start to weld the [src] to the floor.", \
|
|
||||||
"You hear welding")
|
|
||||||
if (do_after(user,20))
|
|
||||||
if(!src || !WT.isOn()) return
|
|
||||||
state = 2
|
|
||||||
user << "You weld the field generator to the floor."
|
|
||||||
else
|
|
||||||
return
|
|
||||||
if(2)
|
|
||||||
if (WT.remove_fuel(0,user))
|
|
||||||
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
|
||||||
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
|
||||||
"You start to cut the [src] free from the floor.", \
|
|
||||||
"You hear welding")
|
|
||||||
if (do_after(user,20))
|
|
||||||
if(!src || !WT.isOn()) return
|
|
||||||
state = 1
|
|
||||||
user << "You cut the [src] free from the floor."
|
|
||||||
else
|
|
||||||
return
|
|
||||||
else
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
emp_act()
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
|
||||||
if(active)
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
..()
|
|
||||||
|
|
||||||
|
|
||||||
bullet_act(var/obj/item/projectile/Proj)
|
|
||||||
if(Proj.flag != "bullet")
|
|
||||||
power += Proj.damage
|
|
||||||
update_icon()
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
Del()
|
|
||||||
src.cleanup()
|
|
||||||
..()
|
|
||||||
|
|
||||||
|
|
||||||
proc
|
|
||||||
turn_off()
|
|
||||||
active = 0
|
|
||||||
spawn(1)
|
|
||||||
src.cleanup()
|
|
||||||
update_icon()
|
|
||||||
|
|
||||||
turn_on()
|
|
||||||
active = 1
|
active = 1
|
||||||
warming_up = 1
|
state = 2
|
||||||
spawn(1)
|
power = field_generator_max_power
|
||||||
while (warming_up<3 && active)
|
anchored = 1
|
||||||
sleep(50)
|
warming_up = 3
|
||||||
warming_up++
|
start_fields()
|
||||||
update_icon()
|
|
||||||
if(warming_up >= 3)
|
|
||||||
start_fields()
|
|
||||||
update_icon()
|
update_icon()
|
||||||
|
Varedit_start = 0
|
||||||
|
|
||||||
|
if(src.active == 2)
|
||||||
calc_power()
|
calc_power()
|
||||||
if(Varpower)
|
update_icon()
|
||||||
return 1
|
return
|
||||||
|
|
||||||
update_icon()
|
|
||||||
if(src.power > field_generator_max_power)
|
|
||||||
src.power = field_generator_max_power
|
|
||||||
|
|
||||||
var/power_draw = 2
|
/obj/machinery/field_generator/attack_hand(mob/user as mob)
|
||||||
for (var/obj/machinery/containment_field/F in fields)
|
if(state == 2)
|
||||||
if (isnull(F))
|
if(get_dist(src, user) <= 1)//Need to actually touch the thing to turn it on
|
||||||
continue
|
if(src.active >= 1)
|
||||||
power_draw++
|
user << "You are unable to turn off the [src.name] once it is online."
|
||||||
if(draw_power(round(power_draw/2,1)))
|
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
for(var/mob/M in viewers(src))
|
user.visible_message("[user.name] turns on the [src.name]", \
|
||||||
M.show_message("\red The [src.name] shuts down!")
|
"You turn on the [src.name].", \
|
||||||
turn_off()
|
"You hear heavy droning")
|
||||||
investigate_log("ran out of power and <font color='red'>deactivated</font>","singulo")
|
turn_on()
|
||||||
src.power = 0
|
investigate_log("<font color='green'>activated</font> by [user.key].","singulo")
|
||||||
return 0
|
|
||||||
|
src.add_fingerprint(user)
|
||||||
|
else
|
||||||
|
user << "The [src] needs to be firmly secured to the floor first."
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/attackby(obj/item/W, mob/user)
|
||||||
|
if(active)
|
||||||
|
user << "The [src] needs to be off."
|
||||||
|
return
|
||||||
|
else if(istype(W, /obj/item/weapon/wrench))
|
||||||
|
switch(state)
|
||||||
|
if(0)
|
||||||
|
state = 1
|
||||||
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
|
user.visible_message("[user.name] secures [src.name] to the floor.", \
|
||||||
|
"You secure the external reinforcing bolts to the floor.", \
|
||||||
|
"You hear ratchet")
|
||||||
|
src.anchored = 1
|
||||||
|
if(1)
|
||||||
|
state = 0
|
||||||
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
|
user.visible_message("[user.name] unsecures [src.name] reinforcing bolts from the floor.", \
|
||||||
|
"You undo the external reinforcing bolts.", \
|
||||||
|
"You hear ratchet")
|
||||||
|
src.anchored = 0
|
||||||
|
if(2)
|
||||||
|
user << "\red The [src.name] needs to be unwelded from the floor."
|
||||||
|
return
|
||||||
|
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||||
|
var/obj/item/weapon/weldingtool/WT = W
|
||||||
|
switch(state)
|
||||||
|
if(0)
|
||||||
|
user << "\red The [src.name] needs to be wrenched to the floor."
|
||||||
|
return
|
||||||
|
if(1)
|
||||||
|
if (WT.remove_fuel(0,user))
|
||||||
|
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
||||||
|
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
||||||
|
"You start to weld the [src] to the floor.", \
|
||||||
|
"You hear welding")
|
||||||
|
if (do_after(user,20))
|
||||||
|
if(!src || !WT.isOn()) return
|
||||||
|
state = 2
|
||||||
|
user << "You weld the field generator to the floor."
|
||||||
|
else
|
||||||
|
return
|
||||||
|
if(2)
|
||||||
|
if (WT.remove_fuel(0,user))
|
||||||
|
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
||||||
|
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
||||||
|
"You start to cut the [src] free from the floor.", \
|
||||||
|
"You hear welding")
|
||||||
|
if (do_after(user,20))
|
||||||
|
if(!src || !WT.isOn()) return
|
||||||
|
state = 1
|
||||||
|
user << "You cut the [src] free from the floor."
|
||||||
|
else
|
||||||
|
return
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/emp_act()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/blob_act()
|
||||||
|
if(active)
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/bullet_act(var/obj/item/projectile/Proj)
|
||||||
|
if(Proj.flag != "bullet")
|
||||||
|
power += Proj.damage
|
||||||
|
update_icon()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/Del()
|
||||||
|
src.cleanup()
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/proc/turn_off()
|
||||||
|
active = 0
|
||||||
|
spawn(1)
|
||||||
|
src.cleanup()
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/proc/turn_on()
|
||||||
|
active = 1
|
||||||
|
warming_up = 1
|
||||||
|
spawn(1)
|
||||||
|
while (warming_up<3 && active)
|
||||||
|
sleep(50)
|
||||||
|
warming_up++
|
||||||
|
update_icon()
|
||||||
|
if(warming_up >= 3)
|
||||||
|
start_fields()
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/proc/calc_power()
|
||||||
|
if(Varpower)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
update_icon()
|
||||||
|
if(src.power > field_generator_max_power)
|
||||||
|
src.power = field_generator_max_power
|
||||||
|
|
||||||
|
var/power_draw = 2
|
||||||
|
for (var/obj/machinery/containment_field/F in fields)
|
||||||
|
if (isnull(F))
|
||||||
|
continue
|
||||||
|
power_draw++
|
||||||
|
if(draw_power(round(power_draw/2,1)))
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
for(var/mob/M in viewers(src))
|
||||||
|
M.show_message("\red The [src.name] shuts down!")
|
||||||
|
turn_off()
|
||||||
|
investigate_log("ran out of power and <font color='red'>deactivated</font>","singulo")
|
||||||
|
src.power = 0
|
||||||
|
return 0
|
||||||
|
|
||||||
//This could likely be better, it tends to start loopin if you have a complex generator loop setup. Still works well enough to run the engine fields will likely recode the field gens and fields sometime -Mport
|
//This could likely be better, it tends to start loopin if you have a complex generator loop setup. Still works well enough to run the engine fields will likely recode the field gens and fields sometime -Mport
|
||||||
draw_power(var/draw = 0, var/failsafe = 0, var/obj/machinery/field_generator/G = null, var/obj/machinery/field_generator/last = null)
|
/obj/machinery/field_generator/proc/draw_power(var/draw = 0, var/failsafe = 0, var/obj/machinery/field_generator/G = null, var/obj/machinery/field_generator/last = null)
|
||||||
if(Varpower)
|
if(Varpower)
|
||||||
return 1
|
return 1
|
||||||
if((G && G == src) || (failsafe >= 8))//Loopin, set fail
|
if((G && G == src) || (failsafe >= 8))//Loopin, set fail
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
failsafe++
|
failsafe++
|
||||||
if(src.power >= draw)//We have enough power
|
if(src.power >= draw)//We have enough power
|
||||||
src.power -= draw
|
src.power -= draw
|
||||||
return 1
|
return 1
|
||||||
else//Need more power
|
else//Need more power
|
||||||
draw -= src.power
|
draw -= src.power
|
||||||
src.power = 0
|
src.power = 0
|
||||||
for(var/obj/machinery/field_generator/FG in connected_gens)
|
for(var/obj/machinery/field_generator/FG in connected_gens)
|
||||||
if(isnull(FG))
|
if(isnull(FG))
|
||||||
continue
|
continue
|
||||||
if(FG == last)//We just asked you
|
if(FG == last)//We just asked you
|
||||||
continue
|
continue
|
||||||
if(G)//Another gen is askin for power and we dont have it
|
if(G)//Another gen is askin for power and we dont have it
|
||||||
if(FG.draw_power(draw,failsafe,G,src))//Can you take the load
|
if(FG.draw_power(draw,failsafe,G,src))//Can you take the load
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
else//We are askin another for power
|
else//We are askin another for power
|
||||||
if(FG.draw_power(draw,failsafe,src,src))
|
if(FG.draw_power(draw,failsafe,src,src))
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
start_fields()
|
|
||||||
if(!src.state == 2 || !anchored)
|
|
||||||
turn_off()
|
|
||||||
return
|
|
||||||
spawn(1)
|
|
||||||
setup_field(1)
|
|
||||||
spawn(2)
|
|
||||||
setup_field(2)
|
|
||||||
spawn(3)
|
|
||||||
setup_field(4)
|
|
||||||
spawn(4)
|
|
||||||
setup_field(8)
|
|
||||||
src.active = 2
|
|
||||||
|
|
||||||
|
|
||||||
setup_field(var/NSEW)
|
|
||||||
var/turf/T = src.loc
|
|
||||||
var/obj/machinery/field_generator/G
|
|
||||||
var/steps = 0
|
|
||||||
if(!NSEW)//Make sure its ran right
|
|
||||||
return
|
|
||||||
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator
|
|
||||||
T = get_step(T, NSEW)
|
|
||||||
if(T.density)//We cant shoot a field though this
|
|
||||||
return 0
|
return 0
|
||||||
for(var/atom/A in T.contents)
|
|
||||||
if(ismob(A))
|
|
||||||
continue
|
|
||||||
if(!istype(A,/obj/machinery/field_generator))
|
|
||||||
if((istype(A,/obj/machinery/door)||istype(A,/obj/machinery/the_singularitygen))&&(A.density))
|
|
||||||
return 0
|
|
||||||
steps += 1
|
|
||||||
G = locate(/obj/machinery/field_generator) in T
|
|
||||||
if(!isnull(G))
|
|
||||||
steps -= 1
|
|
||||||
if(!G.active)
|
|
||||||
return 0
|
|
||||||
break
|
|
||||||
if(isnull(G))
|
|
||||||
return
|
|
||||||
T = src.loc
|
|
||||||
for(var/dist = 0, dist < steps, dist += 1) // creates each field tile
|
|
||||||
var/field_dir = get_dir(T,get_step(G.loc, NSEW))
|
|
||||||
T = get_step(T, NSEW)
|
|
||||||
if(!locate(/obj/machinery/containment_field) in T)
|
|
||||||
var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field()
|
|
||||||
CF.set_master(src,G)
|
|
||||||
fields += CF
|
|
||||||
G.fields += CF
|
|
||||||
CF.loc = T
|
|
||||||
CF.dir = field_dir
|
|
||||||
var/listcheck = 0
|
|
||||||
for(var/obj/machinery/field_generator/FG in connected_gens)
|
|
||||||
if (isnull(FG))
|
|
||||||
continue
|
|
||||||
if(FG == G)
|
|
||||||
listcheck = 1
|
|
||||||
break
|
|
||||||
if(!listcheck)
|
|
||||||
connected_gens.Add(G)
|
|
||||||
listcheck = 0
|
|
||||||
for(var/obj/machinery/field_generator/FG2 in G.connected_gens)
|
|
||||||
if (isnull(FG2))
|
|
||||||
continue
|
|
||||||
if(FG2 == src)
|
|
||||||
listcheck = 1
|
|
||||||
break
|
|
||||||
if(!listcheck)
|
|
||||||
G.connected_gens.Add(src)
|
|
||||||
|
|
||||||
|
|
||||||
cleanup()
|
/obj/machinery/field_generator/proc/start_fields()
|
||||||
clean_up = 1
|
if(!src.state == 2 || !anchored)
|
||||||
for (var/obj/machinery/containment_field/F in fields)
|
turn_off()
|
||||||
if (isnull(F))
|
return
|
||||||
continue
|
spawn(1)
|
||||||
del(F)
|
setup_field(1)
|
||||||
fields = list()
|
spawn(2)
|
||||||
for(var/obj/machinery/field_generator/FG in connected_gens)
|
setup_field(2)
|
||||||
if (isnull(FG))
|
spawn(3)
|
||||||
continue
|
setup_field(4)
|
||||||
FG.connected_gens.Remove(src)
|
spawn(4)
|
||||||
connected_gens.Remove(FG)
|
setup_field(8)
|
||||||
connected_gens = list()
|
src.active = 2
|
||||||
clean_up = 0
|
|
||||||
|
|
||||||
//This is here to help fight the "hurr durr, release singulo cos nobody will notice before the
|
|
||||||
//singulo eats the evidence". It's not fool-proof but better than nothing.
|
/obj/machinery/field_generator/proc/setup_field(var/NSEW)
|
||||||
//I want to avoid using global variables.
|
var/turf/T = src.loc
|
||||||
spawn(1)
|
var/obj/machinery/field_generator/G
|
||||||
var/temp = 1 //stops spam
|
var/steps = 0
|
||||||
for(var/obj/machinery/singularity/O in world)
|
if(!NSEW)//Make sure its ran right
|
||||||
if(O.last_warning && temp)
|
return
|
||||||
if((world.time - O.last_warning) > 50) //to stop message-spam
|
for(var/dist = 0, dist <= 9, dist += 1) // checks out to 8 tiles away for another generator
|
||||||
temp = 0
|
T = get_step(T, NSEW)
|
||||||
message_admins("A singulo exists and a containment field has failed.",1)
|
if(T.density)//We cant shoot a field though this
|
||||||
investigate_log("has <font color='red'>failed</font> whilst a singulo exists.","singulo")
|
return 0
|
||||||
O.last_warning = world.time
|
for(var/atom/A in T.contents)
|
||||||
|
if(ismob(A))
|
||||||
|
continue
|
||||||
|
if(!istype(A,/obj/machinery/field_generator))
|
||||||
|
if((istype(A,/obj/machinery/door)||istype(A,/obj/machinery/the_singularitygen))&&(A.density))
|
||||||
|
return 0
|
||||||
|
steps += 1
|
||||||
|
G = locate(/obj/machinery/field_generator) in T
|
||||||
|
if(!isnull(G))
|
||||||
|
steps -= 1
|
||||||
|
if(!G.active)
|
||||||
|
return 0
|
||||||
|
break
|
||||||
|
if(isnull(G))
|
||||||
|
return
|
||||||
|
T = src.loc
|
||||||
|
for(var/dist = 0, dist < steps, dist += 1) // creates each field tile
|
||||||
|
var/field_dir = get_dir(T,get_step(G.loc, NSEW))
|
||||||
|
T = get_step(T, NSEW)
|
||||||
|
if(!locate(/obj/machinery/containment_field) in T)
|
||||||
|
var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field()
|
||||||
|
CF.set_master(src,G)
|
||||||
|
fields += CF
|
||||||
|
G.fields += CF
|
||||||
|
CF.loc = T
|
||||||
|
CF.dir = field_dir
|
||||||
|
var/listcheck = 0
|
||||||
|
for(var/obj/machinery/field_generator/FG in connected_gens)
|
||||||
|
if (isnull(FG))
|
||||||
|
continue
|
||||||
|
if(FG == G)
|
||||||
|
listcheck = 1
|
||||||
|
break
|
||||||
|
if(!listcheck)
|
||||||
|
connected_gens.Add(G)
|
||||||
|
listcheck = 0
|
||||||
|
for(var/obj/machinery/field_generator/FG2 in G.connected_gens)
|
||||||
|
if (isnull(FG2))
|
||||||
|
continue
|
||||||
|
if(FG2 == src)
|
||||||
|
listcheck = 1
|
||||||
|
break
|
||||||
|
if(!listcheck)
|
||||||
|
G.connected_gens.Add(src)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/field_generator/proc/cleanup()
|
||||||
|
clean_up = 1
|
||||||
|
for (var/obj/machinery/containment_field/F in fields)
|
||||||
|
if (isnull(F))
|
||||||
|
continue
|
||||||
|
del(F)
|
||||||
|
fields = list()
|
||||||
|
for(var/obj/machinery/field_generator/FG in connected_gens)
|
||||||
|
if (isnull(FG))
|
||||||
|
continue
|
||||||
|
FG.connected_gens.Remove(src)
|
||||||
|
connected_gens.Remove(FG)
|
||||||
|
connected_gens = list()
|
||||||
|
clean_up = 0
|
||||||
|
|
||||||
|
//This is here to help fight the "hurr durr, release singulo cos nobody will notice before the
|
||||||
|
//singulo eats the evidence". It's not fool-proof but better than nothing.
|
||||||
|
//I want to avoid using global variables.
|
||||||
|
spawn(1)
|
||||||
|
var/temp = 1 //stops spam
|
||||||
|
for(var/obj/machinery/singularity/O in world)
|
||||||
|
if(O.last_warning && temp)
|
||||||
|
if((world.time - O.last_warning) > 50) //to stop message-spam
|
||||||
|
temp = 0
|
||||||
|
message_admins("A singulo exists and a containment field has failed.",1)
|
||||||
|
investigate_log("has <font color='red'>failed</font> whilst a singulo exists.","singulo")
|
||||||
|
O.last_warning = world.time
|
||||||
|
|||||||
@@ -10,66 +10,66 @@
|
|||||||
var/movement_range = 10
|
var/movement_range = 10
|
||||||
var/energy = 10
|
var/energy = 10
|
||||||
|
|
||||||
weak
|
/obj/effect/accelerated_particle/weak
|
||||||
movement_range = 8
|
movement_range = 8
|
||||||
energy = 5
|
energy = 5
|
||||||
|
|
||||||
strong
|
/obj/effect/accelerated_particle/strong
|
||||||
movement_range = 15
|
movement_range = 15
|
||||||
energy = 15
|
energy = 15
|
||||||
|
|
||||||
|
|
||||||
New(loc, dir = 2)
|
/obj/effect/accelerated_particle/New(loc, dir = 2)
|
||||||
src.loc = loc
|
src.loc = loc
|
||||||
src.dir = dir
|
src.dir = dir
|
||||||
if(movement_range > 20)
|
if(movement_range > 20)
|
||||||
movement_range = 20
|
movement_range = 20
|
||||||
spawn(0)
|
spawn(0)
|
||||||
move(1)
|
move(1)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
Bump(atom/A)
|
/obj/effect/accelerated_particle/Bump(atom/A)
|
||||||
if (A)
|
if (A)
|
||||||
if(ismob(A))
|
|
||||||
toxmob(A)
|
|
||||||
if((istype(A,/obj/machinery/the_singularitygen))||(istype(A,/obj/machinery/singularity/)))
|
|
||||||
A:energy += energy
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Bumped(atom/A)
|
|
||||||
if(ismob(A))
|
if(ismob(A))
|
||||||
Bump(A)
|
toxmob(A)
|
||||||
return
|
if((istype(A,/obj/machinery/the_singularitygen))||(istype(A,/obj/machinery/singularity/)))
|
||||||
|
A:energy += energy
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/effect/accelerated_particle/Bumped(atom/A)
|
||||||
del(src)
|
if(ismob(A))
|
||||||
return
|
Bump(A)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
proc
|
/obj/effect/accelerated_particle/ex_act(severity)
|
||||||
toxmob(var/mob/living/M)
|
del(src)
|
||||||
var/radiation = (energy*2)
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M)
|
||||||
|
var/radiation = (energy*2)
|
||||||
/* if(istype(M,/mob/living/carbon/human))
|
/* if(istype(M,/mob/living/carbon/human))
|
||||||
if(M:wear_suit) //TODO: check for radiation protection
|
if(M:wear_suit) //TODO: check for radiation protection
|
||||||
radiation = round(radiation/2,1)
|
radiation = round(radiation/2,1)
|
||||||
if(istype(M,/mob/living/carbon/monkey))
|
if(istype(M,/mob/living/carbon/monkey))
|
||||||
if(M:wear_suit) //TODO: check for radiation protection
|
if(M:wear_suit) //TODO: check for radiation protection
|
||||||
radiation = round(radiation/2,1)*/
|
radiation = round(radiation/2,1)*/
|
||||||
M.apply_effect((radiation*3),IRRADIATE,0)
|
M.apply_effect((radiation*3),IRRADIATE,0)
|
||||||
M.updatehealth()
|
M.updatehealth()
|
||||||
//M << "\red You feel odd."
|
//M << "\red You feel odd."
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
move(var/lag)
|
/obj/effect/accelerated_particle/proc/move(var/lag)
|
||||||
if(!step(src,dir))
|
if(!step(src,dir))
|
||||||
src.loc = get_step(src,dir)
|
src.loc = get_step(src,dir)
|
||||||
movement_range--
|
movement_range--
|
||||||
if(movement_range <= 0)
|
if(movement_range <= 0)
|
||||||
del(src)
|
del(src)
|
||||||
else
|
else
|
||||||
sleep(lag)
|
sleep(lag)
|
||||||
move(lag)
|
move(lag)
|
||||||
|
|||||||
@@ -71,212 +71,187 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
|
|||||||
var/strength = null
|
var/strength = null
|
||||||
var/desc_holder = null
|
var/desc_holder = null
|
||||||
|
|
||||||
end_cap
|
/obj/structure/particle_accelerator/end_cap
|
||||||
name = "Alpha Particle Generation Array"
|
name = "Alpha Particle Generation Array"
|
||||||
desc_holder = "This is where Alpha particles are generated from \[REDACTED\]"
|
desc_holder = "This is where Alpha particles are generated from \[REDACTED\]"
|
||||||
icon_state = "end_cap"
|
icon_state = "end_cap"
|
||||||
reference = "end_cap"
|
reference = "end_cap"
|
||||||
|
|
||||||
/* update_icon()
|
/obj/structure/particle_accelerator/update_icon()
|
||||||
switch(construction_state)
|
..()
|
||||||
if(0)
|
return
|
||||||
icon_state="[reference]"
|
|
||||||
if(1)
|
|
||||||
icon_state="[reference]"
|
/obj/structure/particle_accelerator/verb/rotate()
|
||||||
if(2)
|
set name = "Rotate Clockwise"
|
||||||
icon_state="[reference]w"
|
set category = "Object"
|
||||||
if(3)
|
set src in oview(1)
|
||||||
if(powered)
|
|
||||||
switch(strength)
|
if (src.anchored || usr:stat)
|
||||||
if(0)
|
usr << "It is fastened to the floor!"
|
||||||
icon_state="[reference]p0"
|
return 0
|
||||||
if(1)
|
src.dir = turn(src.dir, 270)
|
||||||
icon_state="[reference]p1"
|
return 1
|
||||||
if(2)
|
|
||||||
icon_state="[reference]p2"
|
/obj/structure/particle_accelerator/verb/rotateccw()
|
||||||
else
|
set name = "Rotate Counter Clockwise"
|
||||||
icon_state="[reference]p"
|
set category = "Object"
|
||||||
else
|
set src in oview(1)
|
||||||
icon_state="[reference]c"
|
|
||||||
|
if (src.anchored || usr:stat)
|
||||||
|
usr << "It is fastened to the floor!"
|
||||||
|
return 0
|
||||||
|
src.dir = turn(src.dir, 90)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/obj/structure/particle_accelerator/examine()
|
||||||
|
switch(src.construction_state)
|
||||||
|
if(0)
|
||||||
|
src.desc = text("A [name], looks like it's not attached to the flooring")
|
||||||
|
if(1)
|
||||||
|
src.desc = text("A [name], it is missing some cables")
|
||||||
|
if(2)
|
||||||
|
src.desc = text("A [name], the panel is open")
|
||||||
|
if(3)
|
||||||
|
src.desc = text("The [name] is assembled")
|
||||||
|
if(powered)
|
||||||
|
src.desc = src.desc_holder
|
||||||
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/structure/particle_accelerator/attackby(obj/item/W, mob/user)
|
||||||
|
if(istool(W))
|
||||||
|
if(src.process_tool_hit(W,user))
|
||||||
return
|
return
|
||||||
*/
|
..()
|
||||||
|
return
|
||||||
|
|
||||||
update_icon()
|
|
||||||
..()
|
/obj/structure/particle_accelerator/Move()
|
||||||
|
..()
|
||||||
|
if(master && master.active)
|
||||||
|
master.toggle_power()
|
||||||
|
investigate_log("was moved whilst active; it <font color='red'>powered down</font>.","singulo")
|
||||||
|
|
||||||
|
/obj/structure/particle_accelerator/ex_act(severity)
|
||||||
|
switch(severity)
|
||||||
|
if(1.0)
|
||||||
|
del(src)
|
||||||
return
|
return
|
||||||
|
if(2.0)
|
||||||
|
if (prob(50))
|
||||||
verb/rotate()
|
|
||||||
set name = "Rotate Clockwise"
|
|
||||||
set category = "Object"
|
|
||||||
set src in oview(1)
|
|
||||||
|
|
||||||
if (src.anchored || usr:stat)
|
|
||||||
usr << "It is fastened to the floor!"
|
|
||||||
return 0
|
|
||||||
src.dir = turn(src.dir, 270)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
verb/rotateccw()
|
|
||||||
set name = "Rotate Counter Clockwise"
|
|
||||||
set category = "Object"
|
|
||||||
set src in oview(1)
|
|
||||||
|
|
||||||
if (src.anchored || usr:stat)
|
|
||||||
usr << "It is fastened to the floor!"
|
|
||||||
return 0
|
|
||||||
src.dir = turn(src.dir, 90)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
examine()
|
|
||||||
switch(src.construction_state)
|
|
||||||
if(0)
|
|
||||||
src.desc = text("A [name], looks like it's not attached to the flooring")
|
|
||||||
if(1)
|
|
||||||
src.desc = text("A [name], it is missing some cables")
|
|
||||||
if(2)
|
|
||||||
src.desc = text("A [name], the panel is open")
|
|
||||||
if(3)
|
|
||||||
src.desc = text("The [name] is assembled")
|
|
||||||
if(powered)
|
|
||||||
src.desc = src.desc_holder
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/W, mob/user)
|
|
||||||
if(istool(W))
|
|
||||||
if(src.process_tool_hit(W,user))
|
|
||||||
return
|
|
||||||
..()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Move()
|
|
||||||
..()
|
|
||||||
if(master && master.active)
|
|
||||||
master.toggle_power()
|
|
||||||
investigate_log("was moved whilst active; it <font color='red'>powered down</font>.","singulo")
|
|
||||||
|
|
||||||
ex_act(severity)
|
|
||||||
switch(severity)
|
|
||||||
if(1.0)
|
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(2.0)
|
if(3.0)
|
||||||
if (prob(50))
|
if (prob(25))
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(3.0)
|
else
|
||||||
if (prob(25))
|
return
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
|
/obj/structure/particle_accelerator/blob_act()
|
||||||
|
if(prob(50))
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/structure/particle_accelerator/meteorhit()
|
||||||
|
if(prob(50))
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/structure/particle_accelerator/update_icon()
|
||||||
|
switch(construction_state)
|
||||||
|
if(0,1)
|
||||||
|
icon_state="[reference]"
|
||||||
|
if(2)
|
||||||
|
icon_state="[reference]w"
|
||||||
|
if(3)
|
||||||
|
if(powered)
|
||||||
|
icon_state="[reference]p[strength]"
|
||||||
else
|
else
|
||||||
return
|
icon_state="[reference]c"
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/structure/particle_accelerator/proc/update_state()
|
||||||
|
if(master)
|
||||||
|
master.update_state()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
/obj/structure/particle_accelerator/proc/report_ready(var/obj/O)
|
||||||
if(prob(50))
|
if(O && (O == master))
|
||||||
del(src)
|
if(construction_state >= 3)
|
||||||
return
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
meteorhit()
|
/obj/structure/particle_accelerator/proc/report_master()
|
||||||
if(prob(50))
|
if(master)
|
||||||
del(src)
|
return master
|
||||||
return
|
return 0
|
||||||
|
|
||||||
update_icon()
|
|
||||||
switch(construction_state)
|
|
||||||
if(0,1)
|
|
||||||
icon_state="[reference]"
|
|
||||||
if(2)
|
|
||||||
icon_state="[reference]w"
|
|
||||||
if(3)
|
|
||||||
if(powered)
|
|
||||||
icon_state="[reference]p[strength]"
|
|
||||||
else
|
|
||||||
icon_state="[reference]c"
|
|
||||||
return
|
|
||||||
|
|
||||||
proc
|
|
||||||
update_state()
|
|
||||||
if(master)
|
|
||||||
master.update_state()
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
report_ready(var/obj/O)
|
/obj/structure/particle_accelerator/proc/connect_master(var/obj/O)
|
||||||
if(O && (O == master))
|
if(O && istype(O,/obj/machinery/particle_accelerator/control_box))
|
||||||
if(construction_state >= 3)
|
if(O.dir == src.dir)
|
||||||
return 1
|
master = O
|
||||||
return 0
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
report_master()
|
/obj/structure/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user)
|
||||||
if(master)
|
if(!(O) || !(user))
|
||||||
return master
|
return 0
|
||||||
return 0
|
if(!ismob(user) || !isobj(O))
|
||||||
|
return 0
|
||||||
|
var/temp_state = src.construction_state
|
||||||
|
|
||||||
|
switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
|
||||||
connect_master(var/obj/O)
|
if(0)
|
||||||
if(O && istype(O,/obj/machinery/particle_accelerator/control_box))
|
if(iswrench(O))
|
||||||
if(O.dir == src.dir)
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
master = O
|
src.anchored = 1
|
||||||
return 1
|
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
||||||
return 0
|
"You secure the external bolts.")
|
||||||
|
temp_state++
|
||||||
|
if(1)
|
||||||
process_tool_hit(var/obj/O, var/mob/user)
|
if(iswrench(O))
|
||||||
if(!(O) || !(user))
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
return 0
|
src.anchored = 0
|
||||||
if(!ismob(user) || !isobj(O))
|
user.visible_message("[user.name] detaches the [src.name] from the floor.", \
|
||||||
return 0
|
"You remove the external bolts.")
|
||||||
var/temp_state = src.construction_state
|
temp_state--
|
||||||
|
else if(iscoil(O))
|
||||||
switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
|
if(O:use(1,user))
|
||||||
if(0)
|
user.visible_message("[user.name] adds wires to the [src.name].", \
|
||||||
if(iswrench(O))
|
"You add some wires.")
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
temp_state++
|
||||||
src.anchored = 1
|
if(2)
|
||||||
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
if(iswirecutter(O))//TODO:Shock user if its on?
|
||||||
"You secure the external bolts.")
|
user.visible_message("[user.name] removes some wires from the [src.name].", \
|
||||||
temp_state++
|
"You remove some wires.")
|
||||||
if(1)
|
temp_state--
|
||||||
if(iswrench(O))
|
else if(isscrewdriver(O))
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
user.visible_message("[user.name] closes the [src.name]'s access panel.", \
|
||||||
src.anchored = 0
|
"You close the access panel.")
|
||||||
user.visible_message("[user.name] detaches the [src.name] from the floor.", \
|
temp_state++
|
||||||
"You remove the external bolts.")
|
if(3)
|
||||||
temp_state--
|
if(isscrewdriver(O))
|
||||||
else if(iscoil(O))
|
user.visible_message("[user.name] opens the [src.name]'s access panel.", \
|
||||||
if(O:use(1,user))
|
"You open the access panel.")
|
||||||
user.visible_message("[user.name] adds wires to the [src.name].", \
|
temp_state--
|
||||||
"You add some wires.")
|
if(temp_state == src.construction_state)//Nothing changed
|
||||||
temp_state++
|
return 0
|
||||||
if(2)
|
else
|
||||||
if(iswirecutter(O))//TODO:Shock user if its on?
|
src.construction_state = temp_state
|
||||||
user.visible_message("[user.name] removes some wires from the [src.name].", \
|
if(src.construction_state < 3)//Was taken apart, update state
|
||||||
"You remove some wires.")
|
update_state()
|
||||||
temp_state--
|
update_icon()
|
||||||
else if(isscrewdriver(O))
|
return 1
|
||||||
user.visible_message("[user.name] closes the [src.name]'s access panel.", \
|
return 0
|
||||||
"You close the access panel.")
|
|
||||||
temp_state++
|
|
||||||
if(3)
|
|
||||||
if(isscrewdriver(O))
|
|
||||||
user.visible_message("[user.name] opens the [src.name]'s access panel.", \
|
|
||||||
"You open the access panel.")
|
|
||||||
temp_state--
|
|
||||||
if(temp_state == src.construction_state)//Nothing changed
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
src.construction_state = temp_state
|
|
||||||
if(src.construction_state < 3)//Was taken apart, update state
|
|
||||||
update_state()
|
|
||||||
update_icon()
|
|
||||||
return 1
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -298,138 +273,138 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
|
|||||||
var/desc_holder = null
|
var/desc_holder = null
|
||||||
|
|
||||||
|
|
||||||
verb/rotate()
|
/obj/machinery/particle_accelerator/verb/rotate()
|
||||||
set name = "Rotate Clockwise"
|
set name = "Rotate Clockwise"
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
set src in oview(1)
|
set src in oview(1)
|
||||||
|
|
||||||
if (src.anchored || usr:stat)
|
if (src.anchored || usr:stat)
|
||||||
usr << "It is fastened to the floor!"
|
usr << "It is fastened to the floor!"
|
||||||
return 0
|
return 0
|
||||||
src.dir = turn(src.dir, 270)
|
src.dir = turn(src.dir, 270)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
verb/rotateccw()
|
/obj/machinery/particle_accelerator/verb/rotateccw()
|
||||||
set name = "Rotate Counter-Clockwise"
|
set name = "Rotate Counter-Clockwise"
|
||||||
set category = "Object"
|
set category = "Object"
|
||||||
set src in oview(1)
|
set src in oview(1)
|
||||||
|
|
||||||
if (src.anchored || usr:stat)
|
if (src.anchored || usr:stat)
|
||||||
usr << "It is fastened to the floor!"
|
usr << "It is fastened to the floor!"
|
||||||
return 0
|
return 0
|
||||||
src.dir = turn(src.dir, 90)
|
src.dir = turn(src.dir, 90)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
update_icon()
|
/obj/machinery/particle_accelerator/update_icon()
|
||||||
return
|
return
|
||||||
|
|
||||||
examine()
|
/obj/machinery/particle_accelerator/examine()
|
||||||
switch(src.construction_state)
|
switch(src.construction_state)
|
||||||
if(0)
|
if(0)
|
||||||
src.desc = text("A [name], looks like it's not attached to the flooring")
|
src.desc = text("A [name], looks like it's not attached to the flooring")
|
||||||
if(1)
|
if(1)
|
||||||
src.desc = text("A [name], it is missing some cables")
|
src.desc = text("A [name], it is missing some cables")
|
||||||
if(2)
|
if(2)
|
||||||
src.desc = text("A [name], the panel is open")
|
src.desc = text("A [name], the panel is open")
|
||||||
if(3)
|
if(3)
|
||||||
src.desc = text("The [name] is assembled")
|
src.desc = text("The [name] is assembled")
|
||||||
if(powered)
|
if(powered)
|
||||||
src.desc = src.desc_holder
|
src.desc = src.desc_holder
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/W, mob/user)
|
/obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user)
|
||||||
if(istool(W))
|
if(istool(W))
|
||||||
if(src.process_tool_hit(W,user))
|
if(src.process_tool_hit(W,user))
|
||||||
return
|
return
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/particle_accelerator/ex_act(severity)
|
||||||
switch(severity)
|
switch(severity)
|
||||||
if(1.0)
|
if(1.0)
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
if(2.0)
|
||||||
|
if (prob(50))
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(2.0)
|
if(3.0)
|
||||||
if (prob(50))
|
if (prob(25))
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(3.0)
|
else
|
||||||
if (prob(25))
|
return
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
else
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
/obj/machinery/particle_accelerator/blob_act()
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
meteorhit()
|
/obj/machinery/particle_accelerator/meteorhit()
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
proc
|
|
||||||
update_state()
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
process_tool_hit(var/obj/O, var/mob/user)
|
/obj/machinery/particle_accelerator/proc/update_state()
|
||||||
if(!(O) || !(user))
|
return 0
|
||||||
return 0
|
|
||||||
if(!ismob(user) || !isobj(O))
|
|
||||||
return 0
|
/obj/machinery/particle_accelerator/proc/process_tool_hit(var/obj/O, var/mob/user)
|
||||||
var/temp_state = src.construction_state
|
if(!(O) || !(user))
|
||||||
switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
|
return 0
|
||||||
if(0)
|
if(!ismob(user) || !isobj(O))
|
||||||
if(iswrench(O))
|
return 0
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
var/temp_state = src.construction_state
|
||||||
src.anchored = 1
|
switch(src.construction_state)//TODO:Might be more interesting to have it need several parts rather than a single list of steps
|
||||||
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
if(0)
|
||||||
"You secure the external bolts.")
|
if(iswrench(O))
|
||||||
temp_state++
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
if(1)
|
src.anchored = 1
|
||||||
if(iswrench(O))
|
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
||||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
"You secure the external bolts.")
|
||||||
src.anchored = 0
|
temp_state++
|
||||||
user.visible_message("[user.name] detaches the [src.name] from the floor.", \
|
if(1)
|
||||||
"You remove the external bolts.")
|
if(iswrench(O))
|
||||||
temp_state--
|
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||||
else if(iscoil(O))
|
src.anchored = 0
|
||||||
if(O:use(1))
|
user.visible_message("[user.name] detaches the [src.name] from the floor.", \
|
||||||
user.visible_message("[user.name] adds wires to the [src.name].", \
|
"You remove the external bolts.")
|
||||||
"You add some wires.")
|
temp_state--
|
||||||
temp_state++
|
else if(iscoil(O))
|
||||||
if(2)
|
if(O:use(1))
|
||||||
if(iswirecutter(O))//TODO:Shock user if its on?
|
user.visible_message("[user.name] adds wires to the [src.name].", \
|
||||||
user.visible_message("[user.name] removes some wires from the [src.name].", \
|
"You add some wires.")
|
||||||
"You remove some wires.")
|
temp_state++
|
||||||
temp_state--
|
if(2)
|
||||||
else if(isscrewdriver(O))
|
if(iswirecutter(O))//TODO:Shock user if its on?
|
||||||
user.visible_message("[user.name] closes the [src.name]'s access panel.", \
|
user.visible_message("[user.name] removes some wires from the [src.name].", \
|
||||||
"You close the access panel.")
|
"You remove some wires.")
|
||||||
temp_state++
|
temp_state--
|
||||||
if(3)
|
else if(isscrewdriver(O))
|
||||||
if(isscrewdriver(O))
|
user.visible_message("[user.name] closes the [src.name]'s access panel.", \
|
||||||
user.visible_message("[user.name] opens the [src.name]'s access panel.", \
|
"You close the access panel.")
|
||||||
"You open the access panel.")
|
temp_state++
|
||||||
temp_state--
|
if(3)
|
||||||
active = 0
|
if(isscrewdriver(O))
|
||||||
if(temp_state == src.construction_state)//Nothing changed
|
user.visible_message("[user.name] opens the [src.name]'s access panel.", \
|
||||||
return 0
|
"You open the access panel.")
|
||||||
else
|
temp_state--
|
||||||
if(src.construction_state < 3)//Was taken apart, update state
|
active = 0
|
||||||
update_state()
|
if(temp_state == src.construction_state)//Nothing changed
|
||||||
if(use_power)
|
return 0
|
||||||
use_power = 0
|
else
|
||||||
src.construction_state = temp_state
|
if(src.construction_state < 3)//Was taken apart, update state
|
||||||
if(src.construction_state >= 3)
|
update_state()
|
||||||
use_power = 1
|
if(use_power)
|
||||||
update_icon()
|
use_power = 0
|
||||||
return 1
|
src.construction_state = temp_state
|
||||||
return 0
|
if(src.construction_state >= 3)
|
||||||
|
use_power = 1
|
||||||
|
update_icon()
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
icon_state = "fuel_chamber"
|
icon_state = "fuel_chamber"
|
||||||
reference = "fuel_chamber"
|
reference = "fuel_chamber"
|
||||||
|
|
||||||
update_icon()
|
/obj/structure/particle_accelerator/fuel_chamber/update_icon()
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
@@ -14,217 +14,215 @@
|
|||||||
construction_state = 0
|
construction_state = 0
|
||||||
active = 0
|
active = 0
|
||||||
dir = 1
|
dir = 1
|
||||||
var
|
var/list/obj/structure/particle_accelerator/connected_parts
|
||||||
list/obj/structure/particle_accelerator/connected_parts
|
var/assembled = 0
|
||||||
|
var/parts = null
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/New()
|
||||||
|
connected_parts = list()
|
||||||
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/attack_hand(mob/user as mob)
|
||||||
|
if(construction_state >= 3)
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/update_state()
|
||||||
|
if(construction_state < 3)
|
||||||
|
use_power = 0
|
||||||
assembled = 0
|
assembled = 0
|
||||||
parts = null
|
active = 0
|
||||||
|
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||||
New()
|
part.strength = null
|
||||||
|
part.powered = 0
|
||||||
|
part.update_icon()
|
||||||
connected_parts = list()
|
connected_parts = list()
|
||||||
..()
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
|
||||||
if(construction_state >= 3)
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
update_state()
|
|
||||||
if(construction_state < 3)
|
|
||||||
use_power = 0
|
|
||||||
assembled = 0
|
|
||||||
active = 0
|
|
||||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
|
||||||
part.strength = null
|
|
||||||
part.powered = 0
|
|
||||||
part.update_icon()
|
|
||||||
connected_parts = list()
|
|
||||||
return
|
|
||||||
if(!part_scan())
|
|
||||||
use_power = 1
|
|
||||||
active = 0
|
|
||||||
connected_parts = list()
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
if(!part_scan())
|
||||||
|
use_power = 1
|
||||||
|
active = 0
|
||||||
|
connected_parts = list()
|
||||||
|
|
||||||
update_icon()
|
return
|
||||||
if(active)
|
|
||||||
icon_state = "[reference]p1"
|
/obj/machinery/particle_accelerator/control_box/update_icon()
|
||||||
|
if(active)
|
||||||
|
icon_state = "[reference]p1"
|
||||||
|
else
|
||||||
|
if(use_power)
|
||||||
|
if(assembled)
|
||||||
|
icon_state = "[reference]p"
|
||||||
|
else
|
||||||
|
icon_state = "u[reference]p"
|
||||||
else
|
else
|
||||||
if(use_power)
|
switch(construction_state)
|
||||||
if(assembled)
|
if(0)
|
||||||
icon_state = "[reference]p"
|
icon_state = "[reference]"
|
||||||
|
if(1)
|
||||||
|
icon_state = "[reference]"
|
||||||
|
if(2)
|
||||||
|
icon_state = "[reference]w"
|
||||||
else
|
else
|
||||||
icon_state = "u[reference]p"
|
icon_state = "[reference]c"
|
||||||
else
|
return
|
||||||
switch(construction_state)
|
|
||||||
if(0)
|
/obj/machinery/particle_accelerator/control_box/Topic(href, href_list)
|
||||||
icon_state = "[reference]"
|
..()
|
||||||
if(1)
|
//Ignore input if we are broken, !silicon guy cant touch us, or nonai controlling from super far away
|
||||||
icon_state = "[reference]"
|
if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon)) || (get_dist(src, usr) > 8 && !istype(usr, /mob/living/silicon/ai)))
|
||||||
if(2)
|
usr.machine = null
|
||||||
icon_state = "[reference]w"
|
usr << browse(null, "window=pacontrol")
|
||||||
else
|
|
||||||
icon_state = "[reference]c"
|
|
||||||
return
|
return
|
||||||
|
|
||||||
Topic(href, href_list)
|
if( href_list["close"] )
|
||||||
..()
|
usr << browse(null, "window=pacontrol")
|
||||||
//Ignore input if we are broken, !silicon guy cant touch us, or nonai controlling from super far away
|
usr.machine = null
|
||||||
if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon)) || (get_dist(src, usr) > 8 && !istype(usr, /mob/living/silicon/ai)))
|
return
|
||||||
usr.machine = null
|
if(href_list["togglep"])
|
||||||
usr << browse(null, "window=pacontrol")
|
src.toggle_power()
|
||||||
return
|
investigate_log("turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [usr.key]","singulo")
|
||||||
|
else if(href_list["scan"])
|
||||||
|
src.part_scan()
|
||||||
|
else if(href_list["strengthup"])
|
||||||
|
strength++
|
||||||
|
if(strength > 2)
|
||||||
|
strength = 2
|
||||||
|
else
|
||||||
|
investigate_log("increased to <font color='red'>[strength]</font> by [usr.key]","singulo")
|
||||||
|
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||||
|
part.strength = strength
|
||||||
|
part.update_icon()
|
||||||
|
|
||||||
if( href_list["close"] )
|
else if(href_list["strengthdown"])
|
||||||
usr << browse(null, "window=pacontrol")
|
strength--
|
||||||
usr.machine = null
|
if(strength < 0)
|
||||||
return
|
strength = 0
|
||||||
if(href_list["togglep"])
|
else
|
||||||
|
investigate_log("decreased to <font color='green'>[strength]</font> by [usr.key]","singulo")
|
||||||
|
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||||
|
part.strength = strength
|
||||||
|
part.update_icon()
|
||||||
|
src.updateDialog()
|
||||||
|
src.update_icon()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/power_change()
|
||||||
|
..()
|
||||||
|
if(stat & NOPOWER)
|
||||||
|
active = 0
|
||||||
|
use_power = 0
|
||||||
|
else if(!stat && construction_state == 3)
|
||||||
|
use_power = 1
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/process()
|
||||||
|
if(src.active)
|
||||||
|
//a part is missing!
|
||||||
|
if( length(connected_parts) < 6 )
|
||||||
|
investigate_log("lost a connected part; It <font color='red'>powered down</font>.","singulo")
|
||||||
src.toggle_power()
|
src.toggle_power()
|
||||||
investigate_log("turned [active?"<font color='red'>ON</font>":"<font color='green'>OFF</font>"] by [usr.key]","singulo")
|
|
||||||
else if(href_list["scan"])
|
|
||||||
src.part_scan()
|
|
||||||
else if(href_list["strengthup"])
|
|
||||||
strength++
|
|
||||||
if(strength > 2)
|
|
||||||
strength = 2
|
|
||||||
else
|
|
||||||
investigate_log("increased to <font color='red'>[strength]</font> by [usr.key]","singulo")
|
|
||||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
|
||||||
part.strength = strength
|
|
||||||
part.update_icon()
|
|
||||||
|
|
||||||
else if(href_list["strengthdown"])
|
|
||||||
strength--
|
|
||||||
if(strength < 0)
|
|
||||||
strength = 0
|
|
||||||
else
|
|
||||||
investigate_log("decreased to <font color='green'>[strength]</font> by [usr.key]","singulo")
|
|
||||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
|
||||||
part.strength = strength
|
|
||||||
part.update_icon()
|
|
||||||
src.updateDialog()
|
|
||||||
src.update_icon()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
power_change()
|
|
||||||
..()
|
|
||||||
if(stat & NOPOWER)
|
|
||||||
active = 0
|
|
||||||
use_power = 0
|
|
||||||
else if(!stat && construction_state == 3)
|
|
||||||
use_power = 1
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
process()
|
|
||||||
if(src.active)
|
|
||||||
//a part is missing!
|
|
||||||
if( length(connected_parts) < 6 )
|
|
||||||
investigate_log("lost a connected part; It <font color='red'>powered down</font>.","singulo")
|
|
||||||
src.toggle_power()
|
|
||||||
return
|
|
||||||
//emit some particles
|
|
||||||
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
|
|
||||||
if(PE)
|
|
||||||
PE.emit_particle(src.strength)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc
|
|
||||||
part_scan()
|
|
||||||
for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src))
|
|
||||||
src.dir = F.dir
|
|
||||||
connected_parts = list()
|
|
||||||
var/tally = 0
|
|
||||||
var/ldir = turn(dir,-90)
|
|
||||||
var/rdir = turn(dir,90)
|
|
||||||
var/odir = turn(dir,180)
|
|
||||||
var/turf/T = src.loc
|
|
||||||
T = get_step(T,rdir)
|
|
||||||
if(check_part(T,/obj/structure/particle_accelerator/fuel_chamber))
|
|
||||||
tally++
|
|
||||||
T = get_step(T,odir)
|
|
||||||
if(check_part(T,/obj/structure/particle_accelerator/end_cap))
|
|
||||||
tally++
|
|
||||||
T = get_step(T,dir)
|
|
||||||
T = get_step(T,dir)
|
|
||||||
if(check_part(T,/obj/structure/particle_accelerator/power_box))
|
|
||||||
tally++
|
|
||||||
T = get_step(T,dir)
|
|
||||||
if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/center))
|
|
||||||
tally++
|
|
||||||
T = get_step(T,ldir)
|
|
||||||
if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/left))
|
|
||||||
tally++
|
|
||||||
T = get_step(T,rdir)
|
|
||||||
T = get_step(T,rdir)
|
|
||||||
if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/right))
|
|
||||||
tally++
|
|
||||||
if(tally >= 6)
|
|
||||||
assembled = 1
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
assembled = 0
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
check_part(var/turf/T, var/type)
|
|
||||||
if(!(T)||!(type))
|
|
||||||
return 0
|
|
||||||
var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T
|
|
||||||
if(istype(PA, type))
|
|
||||||
if(PA.connect_master(src))
|
|
||||||
if(PA.report_ready(src))
|
|
||||||
src.connected_parts.Add(PA)
|
|
||||||
return 1
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
toggle_power()
|
|
||||||
src.active = !src.active
|
|
||||||
if(src.active)
|
|
||||||
src.use_power = 2
|
|
||||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
|
||||||
part.strength = src.strength
|
|
||||||
part.powered = 1
|
|
||||||
part.update_icon()
|
|
||||||
else
|
|
||||||
src.use_power = 1
|
|
||||||
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
|
||||||
part.strength = null
|
|
||||||
part.powered = 0
|
|
||||||
part.update_icon()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
interact(mob/user)
|
|
||||||
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
|
||||||
if(!istype(user, /mob/living/silicon))
|
|
||||||
user.machine = null
|
|
||||||
user << browse(null, "window=pacontrol")
|
|
||||||
return
|
|
||||||
user.machine = src
|
|
||||||
|
|
||||||
var/dat = ""
|
|
||||||
dat += "Particle Accelerator Control Panel<BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR><BR>"
|
|
||||||
dat += "Status:<BR>"
|
|
||||||
if(!assembled)
|
|
||||||
dat += "Unable to detect all parts!<BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];scan=1'>Run Scan</A><BR><BR>"
|
|
||||||
else
|
|
||||||
dat += "All parts in place.<BR><BR>"
|
|
||||||
dat += "Power:"
|
|
||||||
if(active)
|
|
||||||
dat += "On<BR>"
|
|
||||||
else
|
|
||||||
dat += "Off <BR>"
|
|
||||||
dat += "<A href='?src=\ref[src];togglep=1'>Toggle Power</A><BR><BR>"
|
|
||||||
dat += "Particle Strength: [src.strength] "
|
|
||||||
dat += "<A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
|
||||||
|
|
||||||
user << browse(dat, "window=pacontrol;size=420x500")
|
|
||||||
onclose(user, "pacontrol")
|
|
||||||
return
|
return
|
||||||
|
//emit some particles
|
||||||
|
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
|
||||||
|
if(PE)
|
||||||
|
PE.emit_particle(src.strength)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/proc/part_scan()
|
||||||
|
for(var/obj/structure/particle_accelerator/fuel_chamber/F in orange(1,src))
|
||||||
|
src.dir = F.dir
|
||||||
|
connected_parts = list()
|
||||||
|
var/tally = 0
|
||||||
|
var/ldir = turn(dir,-90)
|
||||||
|
var/rdir = turn(dir,90)
|
||||||
|
var/odir = turn(dir,180)
|
||||||
|
var/turf/T = src.loc
|
||||||
|
T = get_step(T,rdir)
|
||||||
|
if(check_part(T,/obj/structure/particle_accelerator/fuel_chamber))
|
||||||
|
tally++
|
||||||
|
T = get_step(T,odir)
|
||||||
|
if(check_part(T,/obj/structure/particle_accelerator/end_cap))
|
||||||
|
tally++
|
||||||
|
T = get_step(T,dir)
|
||||||
|
T = get_step(T,dir)
|
||||||
|
if(check_part(T,/obj/structure/particle_accelerator/power_box))
|
||||||
|
tally++
|
||||||
|
T = get_step(T,dir)
|
||||||
|
if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/center))
|
||||||
|
tally++
|
||||||
|
T = get_step(T,ldir)
|
||||||
|
if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/left))
|
||||||
|
tally++
|
||||||
|
T = get_step(T,rdir)
|
||||||
|
T = get_step(T,rdir)
|
||||||
|
if(check_part(T,/obj/structure/particle_accelerator/particle_emitter/right))
|
||||||
|
tally++
|
||||||
|
if(tally >= 6)
|
||||||
|
assembled = 1
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
assembled = 0
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/proc/check_part(var/turf/T, var/type)
|
||||||
|
if(!(T)||!(type))
|
||||||
|
return 0
|
||||||
|
var/obj/structure/particle_accelerator/PA = locate(/obj/structure/particle_accelerator) in T
|
||||||
|
if(istype(PA, type))
|
||||||
|
if(PA.connect_master(src))
|
||||||
|
if(PA.report_ready(src))
|
||||||
|
src.connected_parts.Add(PA)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
|
||||||
|
src.active = !src.active
|
||||||
|
if(src.active)
|
||||||
|
src.use_power = 2
|
||||||
|
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||||
|
part.strength = src.strength
|
||||||
|
part.powered = 1
|
||||||
|
part.update_icon()
|
||||||
|
else
|
||||||
|
src.use_power = 1
|
||||||
|
for(var/obj/structure/particle_accelerator/part in connected_parts)
|
||||||
|
part.strength = null
|
||||||
|
part.powered = 0
|
||||||
|
part.update_icon()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/particle_accelerator/control_box/proc/interact(mob/user)
|
||||||
|
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
||||||
|
if(!istype(user, /mob/living/silicon))
|
||||||
|
user.machine = null
|
||||||
|
user << browse(null, "window=pacontrol")
|
||||||
|
return
|
||||||
|
user.machine = src
|
||||||
|
|
||||||
|
var/dat = ""
|
||||||
|
dat += "Particle Accelerator Control Panel<BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR><BR>"
|
||||||
|
dat += "Status:<BR>"
|
||||||
|
if(!assembled)
|
||||||
|
dat += "Unable to detect all parts!<BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];scan=1'>Run Scan</A><BR><BR>"
|
||||||
|
else
|
||||||
|
dat += "All parts in place.<BR><BR>"
|
||||||
|
dat += "Power:"
|
||||||
|
if(active)
|
||||||
|
dat += "On<BR>"
|
||||||
|
else
|
||||||
|
dat += "Off <BR>"
|
||||||
|
dat += "<A href='?src=\ref[src];togglep=1'>Toggle Power</A><BR><BR>"
|
||||||
|
dat += "Particle Strength: [src.strength] "
|
||||||
|
dat += "<A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
||||||
|
|
||||||
|
user << browse(dat, "window=pacontrol;size=420x500")
|
||||||
|
onclose(user, "pacontrol")
|
||||||
|
return
|
||||||
@@ -8,43 +8,42 @@
|
|||||||
var/fire_delay = 50
|
var/fire_delay = 50
|
||||||
var/last_shot = 0
|
var/last_shot = 0
|
||||||
|
|
||||||
center
|
/obj/structure/particle_accelerator/particle_emitter/center
|
||||||
icon_state = "emitter_center"
|
icon_state = "emitter_center"
|
||||||
reference = "emitter_center"
|
reference = "emitter_center"
|
||||||
|
|
||||||
left
|
/obj/structure/particle_accelerator/particle_emitter/left
|
||||||
icon_state = "emitter_left"
|
icon_state = "emitter_left"
|
||||||
reference = "emitter_left"
|
reference = "emitter_left"
|
||||||
|
|
||||||
right
|
/obj/structure/particle_accelerator/particle_emitter/right
|
||||||
icon_state = "emitter_right"
|
icon_state = "emitter_right"
|
||||||
reference = "emitter_right"
|
reference = "emitter_right"
|
||||||
|
|
||||||
update_icon()
|
/obj/structure/particle_accelerator/particle_emitter/update_icon()
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
proc
|
/obj/structure/particle_accelerator/particle_emitter/proc/set_delay(var/delay)
|
||||||
set_delay(var/delay)
|
if(delay && delay >= 0)
|
||||||
if(delay && delay >= 0)
|
src.fire_delay = delay
|
||||||
src.fire_delay = delay
|
return 1
|
||||||
return 1
|
return 0
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
emit_particle(var/strength = 0)
|
/obj/structure/particle_accelerator/particle_emitter/proc/emit_particle(var/strength = 0)
|
||||||
if((src.last_shot + src.fire_delay) <= world.time)
|
if((src.last_shot + src.fire_delay) <= world.time)
|
||||||
src.last_shot = world.time
|
src.last_shot = world.time
|
||||||
var/obj/effect/accelerated_particle/A = null
|
var/obj/effect/accelerated_particle/A = null
|
||||||
var/turf/T = get_step(src,dir)
|
var/turf/T = get_step(src,dir)
|
||||||
switch(strength)
|
switch(strength)
|
||||||
if(0)
|
if(0)
|
||||||
A = new/obj/effect/accelerated_particle/weak(T, dir)
|
A = new/obj/effect/accelerated_particle/weak(T, dir)
|
||||||
if(1)
|
if(1)
|
||||||
A = new/obj/effect/accelerated_particle(T, dir)
|
A = new/obj/effect/accelerated_particle(T, dir)
|
||||||
if(2)
|
if(2)
|
||||||
A = new/obj/effect/accelerated_particle/strong(T, dir)
|
A = new/obj/effect/accelerated_particle/strong(T, dir)
|
||||||
if(A)
|
if(A)
|
||||||
A.dir = src.dir
|
A.dir = src.dir
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
icon_state = "power_box"
|
icon_state = "power_box"
|
||||||
reference = "power_box"
|
reference = "power_box"
|
||||||
|
|
||||||
update_icon()
|
/obj/structure/particle_accelerator/power_box/update_icon()
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -32,507 +32,508 @@ var/global/list/uneatable = list(
|
|||||||
var/teleport_del = 0
|
var/teleport_del = 0
|
||||||
var/last_warning
|
var/last_warning
|
||||||
|
|
||||||
New(loc, var/starting_energy = 50, var/temp = 0)
|
/obj/machinery/singularity/New(loc, var/starting_energy = 50, var/temp = 0)
|
||||||
//CARN: admin-alert for chuckle-fuckery.
|
//CARN: admin-alert for chuckle-fuckery.
|
||||||
last_warning = world.time
|
last_warning = world.time
|
||||||
var/count = 0
|
var/count = 0
|
||||||
for(var/obj/machinery/containment_field/CF in world)
|
for(var/obj/machinery/containment_field/CF in world)
|
||||||
count = 1
|
count = 1
|
||||||
|
break
|
||||||
|
if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1)
|
||||||
|
investigate_log("was created. [count?"":"<font color='red'>No containment fields were active</font>"]","singulo")
|
||||||
|
|
||||||
|
src.energy = starting_energy
|
||||||
|
if(temp)
|
||||||
|
spawn(temp)
|
||||||
|
del(src)
|
||||||
|
..()
|
||||||
|
for(var/obj/machinery/singularity_beacon/singubeacon in world)
|
||||||
|
if(singubeacon.active)
|
||||||
|
target = singubeacon
|
||||||
break
|
break
|
||||||
if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1)
|
return
|
||||||
investigate_log("was created. [count?"":"<font color='red'>No containment fields were active</font>"]","singulo")
|
|
||||||
|
|
||||||
src.energy = starting_energy
|
|
||||||
if(temp)
|
|
||||||
spawn(temp)
|
|
||||||
del(src)
|
|
||||||
..()
|
|
||||||
for(var/obj/machinery/singularity_beacon/singubeacon in world)
|
|
||||||
if(singubeacon.active)
|
|
||||||
target = singubeacon
|
|
||||||
break
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Del()
|
/obj/machinery/singularity/Del()
|
||||||
//Could have it do something bad when this happens, explode/implode or something
|
//Could have it do something bad when this happens, explode/implode or something
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
/obj/machinery/singularity/attack_hand(mob/user as mob)
|
||||||
consume(user)
|
consume(user)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
blob_act(severity)
|
/obj/machinery/singularity/blob_act(severity)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/singularity/ex_act(severity)
|
||||||
switch(severity)
|
switch(severity)
|
||||||
if(1.0)
|
if(1.0)
|
||||||
if(prob(25))
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
else
|
|
||||||
energy += 50
|
|
||||||
if(2.0 to 3.0)
|
|
||||||
energy += round((rand(20,60)/2),1)
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Bump(atom/A)
|
|
||||||
consume(A)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
Bumped(atom/A)
|
|
||||||
consume(A)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
process()
|
|
||||||
eat()
|
|
||||||
dissipate()
|
|
||||||
check_energy()
|
|
||||||
if(current_size >= 3)
|
|
||||||
move()
|
|
||||||
if(current_size <= 7)
|
|
||||||
pulse()
|
|
||||||
if(current_size >= 5)
|
|
||||||
if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit
|
|
||||||
event()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
attack_ai() //to prevent ais from gibbing themselves when they click on one.
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
proc
|
|
||||||
dissipate()
|
|
||||||
if(!dissipate)
|
|
||||||
return
|
|
||||||
if(dissipate_track >= dissipate_delay)
|
|
||||||
src.energy -= dissipate_strength
|
|
||||||
dissipate_track = 0
|
|
||||||
else
|
|
||||||
dissipate_track++
|
|
||||||
|
|
||||||
|
|
||||||
expand(var/force_size = 0)
|
|
||||||
var/temp_allowed_size = src.allowed_size
|
|
||||||
if(force_size)
|
|
||||||
temp_allowed_size = force_size
|
|
||||||
switch(temp_allowed_size)
|
|
||||||
if(1)
|
|
||||||
current_size = 1
|
|
||||||
icon = 'icons/obj/singularity.dmi'
|
|
||||||
icon_state = "singularity_s1"
|
|
||||||
pixel_x = 0
|
|
||||||
pixel_y = 0
|
|
||||||
grav_pull = 4
|
|
||||||
consume_range = 0
|
|
||||||
dissipate_delay = 10
|
|
||||||
dissipate_track = 0
|
|
||||||
dissipate_strength = 1
|
|
||||||
if(3)//1 to 3 does not check for the turfs if you put the gens right next to a 1x1 then its going to eat them
|
|
||||||
current_size = 3
|
|
||||||
icon = 'icons/effects/96x96.dmi'
|
|
||||||
icon_state = "singularity_s3"
|
|
||||||
pixel_x = -32
|
|
||||||
pixel_y = -32
|
|
||||||
grav_pull = 6
|
|
||||||
consume_range = 1
|
|
||||||
dissipate_delay = 5
|
|
||||||
dissipate_track = 0
|
|
||||||
dissipate_strength = 5
|
|
||||||
if(5)
|
|
||||||
if((check_turfs_in(1,2))&&(check_turfs_in(2,2))&&(check_turfs_in(4,2))&&(check_turfs_in(8,2)))
|
|
||||||
current_size = 5
|
|
||||||
icon = 'icons/effects/160x160.dmi'
|
|
||||||
icon_state = "singularity_s5"
|
|
||||||
pixel_x = -64
|
|
||||||
pixel_y = -64
|
|
||||||
grav_pull = 8
|
|
||||||
consume_range = 2
|
|
||||||
dissipate_delay = 4
|
|
||||||
dissipate_track = 0
|
|
||||||
dissipate_strength = 20
|
|
||||||
if(7)
|
|
||||||
if((check_turfs_in(1,3))&&(check_turfs_in(2,3))&&(check_turfs_in(4,3))&&(check_turfs_in(8,3)))
|
|
||||||
current_size = 7
|
|
||||||
icon = 'icons/effects/224x224.dmi'
|
|
||||||
icon_state = "singularity_s7"
|
|
||||||
pixel_x = -96
|
|
||||||
pixel_y = -96
|
|
||||||
grav_pull = 10
|
|
||||||
consume_range = 3
|
|
||||||
dissipate_delay = 10
|
|
||||||
dissipate_track = 0
|
|
||||||
dissipate_strength = 10
|
|
||||||
if(9)//this one also lacks a check for gens because it eats everything
|
|
||||||
current_size = 9
|
|
||||||
icon = 'icons/effects/288x288.dmi'
|
|
||||||
icon_state = "singularity_s9"
|
|
||||||
pixel_x = -128
|
|
||||||
pixel_y = -128
|
|
||||||
grav_pull = 10
|
|
||||||
consume_range = 4
|
|
||||||
dissipate = 0 //It cant go smaller due to e loss
|
|
||||||
if(current_size == allowed_size)
|
|
||||||
investigate_log("<font color='red'>grew to size [current_size]</font>","singulo")
|
|
||||||
return 1
|
|
||||||
else if(current_size < (--temp_allowed_size))
|
|
||||||
expand(temp_allowed_size)
|
|
||||||
else
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
check_energy()
|
|
||||||
if(energy <= 0)
|
|
||||||
del(src)
|
|
||||||
return 0
|
|
||||||
switch(energy)//Some of these numbers might need to be changed up later -Mport
|
|
||||||
if(1 to 199)
|
|
||||||
allowed_size = 1
|
|
||||||
if(200 to 499)
|
|
||||||
allowed_size = 3
|
|
||||||
if(500 to 999)
|
|
||||||
allowed_size = 5
|
|
||||||
if(1000 to 1999)
|
|
||||||
allowed_size = 7
|
|
||||||
if(2000 to INFINITY)
|
|
||||||
allowed_size = 9
|
|
||||||
if(current_size != allowed_size)
|
|
||||||
expand()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
eat()
|
|
||||||
set background = 1
|
|
||||||
if(defer_powernet_rebuild != 2)
|
|
||||||
defer_powernet_rebuild = 1
|
|
||||||
for(var/atom/movable/X in orange(consume_range,src))
|
|
||||||
consume(X)
|
|
||||||
for(var/turf/X in orange(consume_range,src))
|
|
||||||
consume(X)
|
|
||||||
for(var/atom/movable/X in orange(grav_pull,src))
|
|
||||||
if(is_type_in_list(X, uneatable)) continue
|
|
||||||
if(((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human)))|| (src.current_size >= 9))
|
|
||||||
step_towards(X,src)
|
|
||||||
else if(istype(X,/mob/living/carbon/human))
|
|
||||||
var/mob/living/carbon/human/H = X
|
|
||||||
if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
|
|
||||||
var/obj/item/clothing/shoes/magboots/M = H.shoes
|
|
||||||
if(M.magpulse)
|
|
||||||
continue
|
|
||||||
step_towards(H,src)
|
|
||||||
if(defer_powernet_rebuild != 2)
|
|
||||||
defer_powernet_rebuild = 0
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
consume(var/atom/A)
|
|
||||||
var/gain = 0
|
|
||||||
if(is_type_in_list(A, uneatable))
|
|
||||||
return 0
|
|
||||||
if (istype(A,/mob/living))//Mobs get gibbed
|
|
||||||
gain = 20
|
|
||||||
if(istype(A,/mob/living/carbon/human))
|
|
||||||
if(A:mind)
|
|
||||||
if((A:mind:assigned_role == "Station Engineer") || (A:mind:assigned_role == "Chief Engineer") )
|
|
||||||
gain = 100
|
|
||||||
spawn()
|
|
||||||
A:gib()
|
|
||||||
sleep(1)
|
|
||||||
else if(istype(A,/obj/))
|
|
||||||
|
|
||||||
if (istype(A,/obj/item/weapon/storage/backpack/holding))
|
|
||||||
var/dist = max((current_size - 2),1)
|
|
||||||
explosion(src.loc,(dist),(dist*2),(dist*4))
|
|
||||||
return
|
|
||||||
|
|
||||||
if(istype(A, /obj/machinery/singularity))//Welp now you did it
|
|
||||||
var/obj/machinery/singularity/S = A
|
|
||||||
src.energy += (S.energy/2)//Absorb most of it
|
|
||||||
del(S)
|
|
||||||
var/dist = max((current_size - 2),1)
|
|
||||||
explosion(src.loc,(dist),(dist*2),(dist*4))
|
|
||||||
return//Quits here, the obj should be gone, hell we might be
|
|
||||||
|
|
||||||
if((teleport_del) && (!istype(A, /obj/machinery)))//Going to see if it does not lag less to tele items over to Z 2
|
|
||||||
var/obj/O = A
|
|
||||||
O.x = 2
|
|
||||||
O.y = 2
|
|
||||||
O.z = 2
|
|
||||||
else
|
|
||||||
A:ex_act(1.0)
|
|
||||||
if(A) del(A)
|
|
||||||
gain = 2
|
|
||||||
else if(isturf(A))
|
|
||||||
var/turf/T = A
|
|
||||||
if(T.intact)
|
|
||||||
for(var/obj/O in T.contents)
|
|
||||||
if(O.level != 1)
|
|
||||||
continue
|
|
||||||
if(O.invisibility == 101)
|
|
||||||
src.consume(O)
|
|
||||||
A:ReplaceWithSpace()
|
|
||||||
gain = 2
|
|
||||||
src.energy += gain
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
move(var/movement_dir = 0)
|
|
||||||
if(!move_self)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if(target && prob(60))
|
|
||||||
movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one
|
|
||||||
else if(!(movement_dir in cardinal))
|
|
||||||
movement_dir = pick(NORTH, SOUTH, EAST, WEST)
|
|
||||||
|
|
||||||
if(movement_dir == last_failed_movement)
|
|
||||||
var/list/L = new/list(NORTH, SOUTH, EAST, WEST)
|
|
||||||
L.Remove(last_failed_movement)
|
|
||||||
movement_dir = pick(L)
|
|
||||||
|
|
||||||
if(current_size >= 9)//The superlarge one does not care about things in its way
|
|
||||||
spawn(0)
|
|
||||||
step(src, movement_dir)
|
|
||||||
spawn(1)
|
|
||||||
step(src, movement_dir)
|
|
||||||
return 1
|
|
||||||
else if(check_turfs_in(movement_dir))
|
|
||||||
last_failed_movement = 0//Reset this because we moved
|
|
||||||
spawn(0)
|
|
||||||
step(src, movement_dir)
|
|
||||||
return 1
|
|
||||||
else
|
|
||||||
last_failed_movement = movement_dir
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
check_turfs_in(var/direction = 0, var/step = 0)
|
|
||||||
if(!direction)
|
|
||||||
return 0
|
|
||||||
var/steps = 0
|
|
||||||
if(!step)
|
|
||||||
switch(current_size)
|
|
||||||
if(1)
|
|
||||||
steps = 1
|
|
||||||
if(3)
|
|
||||||
steps = 3//Yes this is right
|
|
||||||
if(5)
|
|
||||||
steps = 3
|
|
||||||
if(7)
|
|
||||||
steps = 4
|
|
||||||
if(9)
|
|
||||||
steps = 5
|
|
||||||
else
|
|
||||||
steps = step
|
|
||||||
var/list/turfs = list()
|
|
||||||
var/turf/T = src.loc
|
|
||||||
for(var/i = 1 to steps)
|
|
||||||
T = get_step(T,direction)
|
|
||||||
if(!isturf(T))
|
|
||||||
return 0
|
|
||||||
turfs.Add(T)
|
|
||||||
var/dir2 = 0
|
|
||||||
var/dir3 = 0
|
|
||||||
switch(direction)
|
|
||||||
if(NORTH||SOUTH)
|
|
||||||
dir2 = 4
|
|
||||||
dir3 = 8
|
|
||||||
if(EAST||WEST)
|
|
||||||
dir2 = 1
|
|
||||||
dir3 = 2
|
|
||||||
var/turf/T2 = T
|
|
||||||
for(var/j = 1 to steps)
|
|
||||||
T2 = get_step(T2,dir2)
|
|
||||||
if(!isturf(T2))
|
|
||||||
return 0
|
|
||||||
turfs.Add(T2)
|
|
||||||
for(var/k = 1 to steps)
|
|
||||||
T = get_step(T,dir3)
|
|
||||||
if(!isturf(T))
|
|
||||||
return 0
|
|
||||||
turfs.Add(T)
|
|
||||||
for(var/turf/T3 in turfs)
|
|
||||||
if(isnull(T3))
|
|
||||||
continue
|
|
||||||
if(!can_move(T3))
|
|
||||||
return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
can_move(var/turf/T)
|
|
||||||
if(!T)
|
|
||||||
return 0
|
|
||||||
if((locate(/obj/machinery/containment_field) in T)||(locate(/obj/machinery/shieldwall) in T))
|
|
||||||
return 0
|
|
||||||
else if(locate(/obj/machinery/field_generator) in T)
|
|
||||||
var/obj/machinery/field_generator/G = locate(/obj/machinery/field_generator) in T
|
|
||||||
if(G && G.active)
|
|
||||||
return 0
|
|
||||||
else if(locate(/obj/machinery/shieldwallgen) in T)
|
|
||||||
var/obj/machinery/shieldwallgen/S = locate(/obj/machinery/shieldwallgen) in T
|
|
||||||
if(S && S.active)
|
|
||||||
return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
event()
|
|
||||||
var/numb = pick(1,2,3,4,5,6)
|
|
||||||
switch(numb)
|
|
||||||
if(1)//EMP
|
|
||||||
emp_area()
|
|
||||||
if(2,3)//tox damage all carbon mobs in area
|
|
||||||
toxmob()
|
|
||||||
if(4)//Stun mobs who lack optic scanners
|
|
||||||
mezzer()
|
|
||||||
else
|
|
||||||
return 0
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
toxmob()
|
|
||||||
var/toxrange = 10
|
|
||||||
var/toxdamage = 4
|
|
||||||
var/radiation = 15
|
|
||||||
var/radiationmin = 3
|
|
||||||
if (src.energy>200)
|
|
||||||
toxdamage = round(((src.energy-150)/50)*4,1)
|
|
||||||
radiation = round(((src.energy-150)/50)*5,1)
|
|
||||||
radiationmin = round((radiation/5),1)//
|
|
||||||
for(var/mob/living/M in view(toxrange, src.loc))
|
|
||||||
if(istype(M,/mob/living/))
|
|
||||||
M.apply_effect(rand(radiationmin,radiation), IRRADIATE)
|
|
||||||
toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
|
|
||||||
M.apply_effect(toxdamage, TOX)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
mezzer()
|
|
||||||
for(var/mob/living/carbon/M in oviewers(8, src))
|
|
||||||
if(istype(M,/mob/living/carbon/human))
|
|
||||||
if(istype(M:glasses,/obj/item/clothing/glasses/meson))
|
|
||||||
M << "\blue You look directly into The [src.name], good thing you had your protective eyewear on!"
|
|
||||||
return
|
|
||||||
M << "\red You look directly into The [src.name] and feel weak."
|
|
||||||
M.apply_effect(3, STUN)
|
|
||||||
for(var/mob/O in viewers(M, null))
|
|
||||||
O.show_message(text("\red <B>[] stares blankly at The []!</B>", M, src), 1)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
emp_area()
|
|
||||||
empulse(src, 8, 10)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
pulse()
|
|
||||||
for(var/obj/machinery/power/rad_collector/R in orange(15,src))
|
|
||||||
if(istype(R,/obj/machinery/power/rad_collector))
|
|
||||||
R.receive_pulse(energy)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
narsie //Moving narsie to a child object of the singularity so it can be made to function differently. --NEO
|
|
||||||
name = "Tear in the Fabric of Reality"
|
|
||||||
desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees."
|
|
||||||
icon = 'icons/obj/magic_terror.dmi'
|
|
||||||
pixel_x = -89
|
|
||||||
pixel_y = -85
|
|
||||||
current_size = 9 //It moves/eats like a max-size singulo, aside from range. --NEO
|
|
||||||
contained = 0 //Are we going to move around?
|
|
||||||
dissipate = 0 //Do we lose energy over time?
|
|
||||||
move_self = 1 //Do we move on our own?
|
|
||||||
grav_pull = 10 //How many tiles out do we pull?
|
|
||||||
consume_range = 3 //How many tiles out do we eat
|
|
||||||
|
|
||||||
process()
|
|
||||||
eat()
|
|
||||||
if(!target || prob(5))
|
|
||||||
pickcultist()
|
|
||||||
move()
|
|
||||||
if(prob(25))
|
if(prob(25))
|
||||||
mezzer()
|
del(src)
|
||||||
|
|
||||||
consume(var/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO
|
|
||||||
if(is_type_in_list(A, uneatable))
|
|
||||||
return 0
|
|
||||||
if (istype(A,/mob/living))//Mobs get gibbed
|
|
||||||
A:gib()
|
|
||||||
else if(istype(A,/obj/))
|
|
||||||
A:ex_act(1.0)
|
|
||||||
if(A) del(A)
|
|
||||||
else if(isturf(A))
|
|
||||||
var/turf/T = A
|
|
||||||
if(T.intact)
|
|
||||||
for(var/obj/O in T.contents)
|
|
||||||
if(O.level != 1)
|
|
||||||
continue
|
|
||||||
if(O.invisibility == 101)
|
|
||||||
src.consume(O)
|
|
||||||
A:ReplaceWithSpace()
|
|
||||||
return
|
|
||||||
|
|
||||||
ex_act() //No throwing bombs at it either. --NEO
|
|
||||||
return
|
|
||||||
|
|
||||||
proc/pickcultist() //Narsie rewards his cultists with being devoured first, then picks a ghost to follow. --NEO
|
|
||||||
var/list/cultists = list()
|
|
||||||
for(var/datum/mind/cult_nh_mind in ticker.mode.cult)
|
|
||||||
if(!cult_nh_mind.current)
|
|
||||||
continue
|
|
||||||
if(cult_nh_mind.current.stat)
|
|
||||||
continue
|
|
||||||
cultists += cult_nh_mind.current
|
|
||||||
if(cultists.len)
|
|
||||||
acquire(pick(cultists))
|
|
||||||
return
|
return
|
||||||
//If there was living cultists, it picks one to follow.
|
|
||||||
for(var/mob/living/carbon/human/food in living_mob_list)
|
|
||||||
if(food.stat)
|
|
||||||
continue
|
|
||||||
cultists += food
|
|
||||||
if(cultists.len)
|
|
||||||
acquire(pick(cultists))
|
|
||||||
return
|
|
||||||
//no living cultists, pick a living human instead.
|
|
||||||
for(var/mob/dead/observer/ghost in player_list)
|
|
||||||
if(!ghost.client)
|
|
||||||
continue
|
|
||||||
cultists += ghost
|
|
||||||
if(cultists.len)
|
|
||||||
acquire(pick(cultists))
|
|
||||||
return
|
|
||||||
//no living humans, follow a ghost instead.
|
|
||||||
|
|
||||||
proc/acquire(var/mob/food)
|
|
||||||
target << "\blue <b>NAR-SIE HAS LOST INTEREST IN YOU</b>"
|
|
||||||
target = food
|
|
||||||
if(ishuman(target))
|
|
||||||
target << "\red <b>NAR-SIE HUNGERS FOR YOUR SOUL</b>"
|
|
||||||
else
|
else
|
||||||
target << "\red <b>NAR-SIE HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL</b>"
|
energy += 50
|
||||||
|
if(2.0 to 3.0)
|
||||||
|
energy += round((rand(20,60)/2),1)
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/Bump(atom/A)
|
||||||
|
consume(A)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/Bumped(atom/A)
|
||||||
|
consume(A)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/process()
|
||||||
|
eat()
|
||||||
|
dissipate()
|
||||||
|
check_energy()
|
||||||
|
if(current_size >= 3)
|
||||||
|
move()
|
||||||
|
if(current_size <= 7)
|
||||||
|
pulse()
|
||||||
|
if(current_size >= 5)
|
||||||
|
if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit
|
||||||
|
event()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/attack_ai() //to prevent ais from gibbing themselves when they click on one.
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/dissipate()
|
||||||
|
if(!dissipate)
|
||||||
|
return
|
||||||
|
if(dissipate_track >= dissipate_delay)
|
||||||
|
src.energy -= dissipate_strength
|
||||||
|
dissipate_track = 0
|
||||||
|
else
|
||||||
|
dissipate_track++
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/expand(var/force_size = 0)
|
||||||
|
var/temp_allowed_size = src.allowed_size
|
||||||
|
if(force_size)
|
||||||
|
temp_allowed_size = force_size
|
||||||
|
switch(temp_allowed_size)
|
||||||
|
if(1)
|
||||||
|
current_size = 1
|
||||||
|
icon = 'icons/obj/singularity.dmi'
|
||||||
|
icon_state = "singularity_s1"
|
||||||
|
pixel_x = 0
|
||||||
|
pixel_y = 0
|
||||||
|
grav_pull = 4
|
||||||
|
consume_range = 0
|
||||||
|
dissipate_delay = 10
|
||||||
|
dissipate_track = 0
|
||||||
|
dissipate_strength = 1
|
||||||
|
if(3)//1 to 3 does not check for the turfs if you put the gens right next to a 1x1 then its going to eat them
|
||||||
|
current_size = 3
|
||||||
|
icon = 'icons/effects/96x96.dmi'
|
||||||
|
icon_state = "singularity_s3"
|
||||||
|
pixel_x = -32
|
||||||
|
pixel_y = -32
|
||||||
|
grav_pull = 6
|
||||||
|
consume_range = 1
|
||||||
|
dissipate_delay = 5
|
||||||
|
dissipate_track = 0
|
||||||
|
dissipate_strength = 5
|
||||||
|
if(5)
|
||||||
|
if((check_turfs_in(1,2))&&(check_turfs_in(2,2))&&(check_turfs_in(4,2))&&(check_turfs_in(8,2)))
|
||||||
|
current_size = 5
|
||||||
|
icon = 'icons/effects/160x160.dmi'
|
||||||
|
icon_state = "singularity_s5"
|
||||||
|
pixel_x = -64
|
||||||
|
pixel_y = -64
|
||||||
|
grav_pull = 8
|
||||||
|
consume_range = 2
|
||||||
|
dissipate_delay = 4
|
||||||
|
dissipate_track = 0
|
||||||
|
dissipate_strength = 20
|
||||||
|
if(7)
|
||||||
|
if((check_turfs_in(1,3))&&(check_turfs_in(2,3))&&(check_turfs_in(4,3))&&(check_turfs_in(8,3)))
|
||||||
|
current_size = 7
|
||||||
|
icon = 'icons/effects/224x224.dmi'
|
||||||
|
icon_state = "singularity_s7"
|
||||||
|
pixel_x = -96
|
||||||
|
pixel_y = -96
|
||||||
|
grav_pull = 10
|
||||||
|
consume_range = 3
|
||||||
|
dissipate_delay = 10
|
||||||
|
dissipate_track = 0
|
||||||
|
dissipate_strength = 10
|
||||||
|
if(9)//this one also lacks a check for gens because it eats everything
|
||||||
|
current_size = 9
|
||||||
|
icon = 'icons/effects/288x288.dmi'
|
||||||
|
icon_state = "singularity_s9"
|
||||||
|
pixel_x = -128
|
||||||
|
pixel_y = -128
|
||||||
|
grav_pull = 10
|
||||||
|
consume_range = 4
|
||||||
|
dissipate = 0 //It cant go smaller due to e loss
|
||||||
|
if(current_size == allowed_size)
|
||||||
|
investigate_log("<font color='red'>grew to size [current_size]</font>","singulo")
|
||||||
|
return 1
|
||||||
|
else if(current_size < (--temp_allowed_size))
|
||||||
|
expand(temp_allowed_size)
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/check_energy()
|
||||||
|
if(energy <= 0)
|
||||||
|
del(src)
|
||||||
|
return 0
|
||||||
|
switch(energy)//Some of these numbers might need to be changed up later -Mport
|
||||||
|
if(1 to 199)
|
||||||
|
allowed_size = 1
|
||||||
|
if(200 to 499)
|
||||||
|
allowed_size = 3
|
||||||
|
if(500 to 999)
|
||||||
|
allowed_size = 5
|
||||||
|
if(1000 to 1999)
|
||||||
|
allowed_size = 7
|
||||||
|
if(2000 to INFINITY)
|
||||||
|
allowed_size = 9
|
||||||
|
if(current_size != allowed_size)
|
||||||
|
expand()
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/eat()
|
||||||
|
set background = 1
|
||||||
|
if(defer_powernet_rebuild != 2)
|
||||||
|
defer_powernet_rebuild = 1
|
||||||
|
for(var/atom/movable/X in orange(consume_range,src))
|
||||||
|
consume(X)
|
||||||
|
for(var/turf/X in orange(consume_range,src))
|
||||||
|
consume(X)
|
||||||
|
for(var/atom/movable/X in orange(grav_pull,src))
|
||||||
|
if(is_type_in_list(X, uneatable)) continue
|
||||||
|
if(((X) &&(!X:anchored) && (!istype(X,/mob/living/carbon/human)))|| (src.current_size >= 9))
|
||||||
|
step_towards(X,src)
|
||||||
|
else if(istype(X,/mob/living/carbon/human))
|
||||||
|
var/mob/living/carbon/human/H = X
|
||||||
|
if(istype(H.shoes,/obj/item/clothing/shoes/magboots))
|
||||||
|
var/obj/item/clothing/shoes/magboots/M = H.shoes
|
||||||
|
if(M.magpulse)
|
||||||
|
continue
|
||||||
|
step_towards(H,src)
|
||||||
|
if(defer_powernet_rebuild != 2)
|
||||||
|
defer_powernet_rebuild = 0
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/consume(var/atom/A)
|
||||||
|
var/gain = 0
|
||||||
|
if(is_type_in_list(A, uneatable))
|
||||||
|
return 0
|
||||||
|
if (istype(A,/mob/living))//Mobs get gibbed
|
||||||
|
gain = 20
|
||||||
|
if(istype(A,/mob/living/carbon/human))
|
||||||
|
if(A:mind)
|
||||||
|
if((A:mind:assigned_role == "Station Engineer") || (A:mind:assigned_role == "Chief Engineer") )
|
||||||
|
gain = 100
|
||||||
|
spawn()
|
||||||
|
A:gib()
|
||||||
|
sleep(1)
|
||||||
|
else if(istype(A,/obj/))
|
||||||
|
|
||||||
|
if (istype(A,/obj/item/weapon/storage/backpack/holding))
|
||||||
|
var/dist = max((current_size - 2),1)
|
||||||
|
explosion(src.loc,(dist),(dist*2),(dist*4))
|
||||||
|
return
|
||||||
|
|
||||||
|
if(istype(A, /obj/machinery/singularity))//Welp now you did it
|
||||||
|
var/obj/machinery/singularity/S = A
|
||||||
|
src.energy += (S.energy/2)//Absorb most of it
|
||||||
|
del(S)
|
||||||
|
var/dist = max((current_size - 2),1)
|
||||||
|
explosion(src.loc,(dist),(dist*2),(dist*4))
|
||||||
|
return//Quits here, the obj should be gone, hell we might be
|
||||||
|
|
||||||
|
if((teleport_del) && (!istype(A, /obj/machinery)))//Going to see if it does not lag less to tele items over to Z 2
|
||||||
|
var/obj/O = A
|
||||||
|
O.x = 2
|
||||||
|
O.y = 2
|
||||||
|
O.z = 2
|
||||||
|
else
|
||||||
|
A:ex_act(1.0)
|
||||||
|
if(A) del(A)
|
||||||
|
gain = 2
|
||||||
|
else if(isturf(A))
|
||||||
|
var/turf/T = A
|
||||||
|
if(T.intact)
|
||||||
|
for(var/obj/O in T.contents)
|
||||||
|
if(O.level != 1)
|
||||||
|
continue
|
||||||
|
if(O.invisibility == 101)
|
||||||
|
src.consume(O)
|
||||||
|
A:ReplaceWithSpace()
|
||||||
|
gain = 2
|
||||||
|
src.energy += gain
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/move(var/movement_dir = 0)
|
||||||
|
if(!move_self)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(target && prob(60))
|
||||||
|
movement_dir = get_dir(src,target) //moves to a singulo beacon, if there is one
|
||||||
|
else if(!(movement_dir in cardinal))
|
||||||
|
movement_dir = pick(NORTH, SOUTH, EAST, WEST)
|
||||||
|
|
||||||
|
if(movement_dir == last_failed_movement)
|
||||||
|
var/list/L = new/list(NORTH, SOUTH, EAST, WEST)
|
||||||
|
L.Remove(last_failed_movement)
|
||||||
|
movement_dir = pick(L)
|
||||||
|
|
||||||
|
if(current_size >= 9)//The superlarge one does not care about things in its way
|
||||||
|
spawn(0)
|
||||||
|
step(src, movement_dir)
|
||||||
|
spawn(1)
|
||||||
|
step(src, movement_dir)
|
||||||
|
return 1
|
||||||
|
else if(check_turfs_in(movement_dir))
|
||||||
|
last_failed_movement = 0//Reset this because we moved
|
||||||
|
spawn(0)
|
||||||
|
step(src, movement_dir)
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
last_failed_movement = movement_dir
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/check_turfs_in(var/direction = 0, var/step = 0)
|
||||||
|
if(!direction)
|
||||||
|
return 0
|
||||||
|
var/steps = 0
|
||||||
|
if(!step)
|
||||||
|
switch(current_size)
|
||||||
|
if(1)
|
||||||
|
steps = 1
|
||||||
|
if(3)
|
||||||
|
steps = 3//Yes this is right
|
||||||
|
if(5)
|
||||||
|
steps = 3
|
||||||
|
if(7)
|
||||||
|
steps = 4
|
||||||
|
if(9)
|
||||||
|
steps = 5
|
||||||
|
else
|
||||||
|
steps = step
|
||||||
|
var/list/turfs = list()
|
||||||
|
var/turf/T = src.loc
|
||||||
|
for(var/i = 1 to steps)
|
||||||
|
T = get_step(T,direction)
|
||||||
|
if(!isturf(T))
|
||||||
|
return 0
|
||||||
|
turfs.Add(T)
|
||||||
|
var/dir2 = 0
|
||||||
|
var/dir3 = 0
|
||||||
|
switch(direction)
|
||||||
|
if(NORTH||SOUTH)
|
||||||
|
dir2 = 4
|
||||||
|
dir3 = 8
|
||||||
|
if(EAST||WEST)
|
||||||
|
dir2 = 1
|
||||||
|
dir3 = 2
|
||||||
|
var/turf/T2 = T
|
||||||
|
for(var/j = 1 to steps)
|
||||||
|
T2 = get_step(T2,dir2)
|
||||||
|
if(!isturf(T2))
|
||||||
|
return 0
|
||||||
|
turfs.Add(T2)
|
||||||
|
for(var/k = 1 to steps)
|
||||||
|
T = get_step(T,dir3)
|
||||||
|
if(!isturf(T))
|
||||||
|
return 0
|
||||||
|
turfs.Add(T)
|
||||||
|
for(var/turf/T3 in turfs)
|
||||||
|
if(isnull(T3))
|
||||||
|
continue
|
||||||
|
if(!can_move(T3))
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/can_move(var/turf/T)
|
||||||
|
if(!T)
|
||||||
|
return 0
|
||||||
|
if((locate(/obj/machinery/containment_field) in T)||(locate(/obj/machinery/shieldwall) in T))
|
||||||
|
return 0
|
||||||
|
else if(locate(/obj/machinery/field_generator) in T)
|
||||||
|
var/obj/machinery/field_generator/G = locate(/obj/machinery/field_generator) in T
|
||||||
|
if(G && G.active)
|
||||||
|
return 0
|
||||||
|
else if(locate(/obj/machinery/shieldwallgen) in T)
|
||||||
|
var/obj/machinery/shieldwallgen/S = locate(/obj/machinery/shieldwallgen) in T
|
||||||
|
if(S && S.active)
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/event()
|
||||||
|
var/numb = pick(1,2,3,4,5,6)
|
||||||
|
switch(numb)
|
||||||
|
if(1)//EMP
|
||||||
|
emp_area()
|
||||||
|
if(2,3)//tox damage all carbon mobs in area
|
||||||
|
toxmob()
|
||||||
|
if(4)//Stun mobs who lack optic scanners
|
||||||
|
mezzer()
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/toxmob()
|
||||||
|
var/toxrange = 10
|
||||||
|
var/toxdamage = 4
|
||||||
|
var/radiation = 15
|
||||||
|
var/radiationmin = 3
|
||||||
|
if (src.energy>200)
|
||||||
|
toxdamage = round(((src.energy-150)/50)*4,1)
|
||||||
|
radiation = round(((src.energy-150)/50)*5,1)
|
||||||
|
radiationmin = round((radiation/5),1)//
|
||||||
|
for(var/mob/living/M in view(toxrange, src.loc))
|
||||||
|
if(istype(M,/mob/living/))
|
||||||
|
M.apply_effect(rand(radiationmin,radiation), IRRADIATE)
|
||||||
|
toxdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
|
||||||
|
M.apply_effect(toxdamage, TOX)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/mezzer()
|
||||||
|
for(var/mob/living/carbon/M in oviewers(8, src))
|
||||||
|
if(istype(M,/mob/living/carbon/human))
|
||||||
|
if(istype(M:glasses,/obj/item/clothing/glasses/meson))
|
||||||
|
M << "\blue You look directly into The [src.name], good thing you had your protective eyewear on!"
|
||||||
|
return
|
||||||
|
M << "\red You look directly into The [src.name] and feel weak."
|
||||||
|
M.apply_effect(3, STUN)
|
||||||
|
for(var/mob/O in viewers(M, null))
|
||||||
|
O.show_message(text("\red <B>[] stares blankly at The []!</B>", M, src), 1)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/emp_area()
|
||||||
|
empulse(src, 8, 10)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/proc/pulse()
|
||||||
|
for(var/obj/machinery/power/rad_collector/R in orange(15,src))
|
||||||
|
if(istype(R,/obj/machinery/power/rad_collector))
|
||||||
|
R.receive_pulse(energy)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/singularity/narsie //Moving narsie to a child object of the singularity so it can be made to function differently. --NEO
|
||||||
|
name = "Tear in the Fabric of Reality"
|
||||||
|
desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees."
|
||||||
|
icon = 'icons/obj/magic_terror.dmi'
|
||||||
|
pixel_x = -89
|
||||||
|
pixel_y = -85
|
||||||
|
current_size = 9 //It moves/eats like a max-size singulo, aside from range. --NEO
|
||||||
|
contained = 0 //Are we going to move around?
|
||||||
|
dissipate = 0 //Do we lose energy over time?
|
||||||
|
move_self = 1 //Do we move on our own?
|
||||||
|
grav_pull = 10 //How many tiles out do we pull?
|
||||||
|
consume_range = 3 //How many tiles out do we eat
|
||||||
|
|
||||||
|
/obj/machinery/singularity/narsie/process()
|
||||||
|
eat()
|
||||||
|
if(!target || prob(5))
|
||||||
|
pickcultist()
|
||||||
|
move()
|
||||||
|
if(prob(25))
|
||||||
|
mezzer()
|
||||||
|
|
||||||
|
/obj/machinery/singularity/narsie/consume(var/atom/A) //Has its own consume proc because it doesn't need energy and I don't want BoHs to explode it. --NEO
|
||||||
|
if(is_type_in_list(A, uneatable))
|
||||||
|
return 0
|
||||||
|
if (istype(A,/mob/living))//Mobs get gibbed
|
||||||
|
A:gib()
|
||||||
|
else if(istype(A,/obj/))
|
||||||
|
A:ex_act(1.0)
|
||||||
|
if(A) del(A)
|
||||||
|
else if(isturf(A))
|
||||||
|
var/turf/T = A
|
||||||
|
if(T.intact)
|
||||||
|
for(var/obj/O in T.contents)
|
||||||
|
if(O.level != 1)
|
||||||
|
continue
|
||||||
|
if(O.invisibility == 101)
|
||||||
|
src.consume(O)
|
||||||
|
A:ReplaceWithSpace()
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/singularity/narsie/ex_act() //No throwing bombs at it either. --NEO
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/machinery/singularity/narsie/proc/pickcultist() //Narsie rewards his cultists with being devoured first, then picks a ghost to follow. --NEO
|
||||||
|
var/list/cultists = list()
|
||||||
|
for(var/datum/mind/cult_nh_mind in ticker.mode.cult)
|
||||||
|
if(!cult_nh_mind.current)
|
||||||
|
continue
|
||||||
|
if(cult_nh_mind.current.stat)
|
||||||
|
continue
|
||||||
|
cultists += cult_nh_mind.current
|
||||||
|
if(cultists.len)
|
||||||
|
acquire(pick(cultists))
|
||||||
|
return
|
||||||
|
//If there was living cultists, it picks one to follow.
|
||||||
|
for(var/mob/living/carbon/human/food in living_mob_list)
|
||||||
|
if(food.stat)
|
||||||
|
continue
|
||||||
|
cultists += food
|
||||||
|
if(cultists.len)
|
||||||
|
acquire(pick(cultists))
|
||||||
|
return
|
||||||
|
//no living cultists, pick a living human instead.
|
||||||
|
for(var/mob/dead/observer/ghost in player_list)
|
||||||
|
if(!ghost.client)
|
||||||
|
continue
|
||||||
|
cultists += ghost
|
||||||
|
if(cultists.len)
|
||||||
|
acquire(pick(cultists))
|
||||||
|
return
|
||||||
|
//no living humans, follow a ghost instead.
|
||||||
|
|
||||||
|
/obj/machinery/singularity/narsie/proc/acquire(var/mob/food)
|
||||||
|
target << "\blue <b>NAR-SIE HAS LOST INTEREST IN YOU</b>"
|
||||||
|
target = food
|
||||||
|
if(ishuman(target))
|
||||||
|
target << "\red <b>NAR-SIE HUNGERS FOR YOUR SOUL</b>"
|
||||||
|
else
|
||||||
|
target << "\red <b>NAR-SIE HAS CHOSEN YOU TO LEAD HIM TO HIS NEXT MEAL</b>"
|
||||||
|
|
||||||
|
//Wizard narsie
|
||||||
|
|
||||||
/obj/machinery/singularity/narsie/wizard
|
/obj/machinery/singularity/narsie/wizard
|
||||||
grav_pull = 0
|
grav_pull = 0
|
||||||
eat()
|
|
||||||
set background = 1
|
/obj/machinery/singularity/narsie/wizard/eat()
|
||||||
if(defer_powernet_rebuild != 2)
|
set background = 1
|
||||||
defer_powernet_rebuild = 1
|
if(defer_powernet_rebuild != 2)
|
||||||
for(var/atom/movable/X in orange(consume_range,src))
|
defer_powernet_rebuild = 1
|
||||||
consume(X)
|
for(var/atom/movable/X in orange(consume_range,src))
|
||||||
for(var/turf/X in orange(consume_range,src))
|
consume(X)
|
||||||
consume(X)
|
for(var/turf/X in orange(consume_range,src))
|
||||||
if(defer_powernet_rebuild != 2)
|
consume(X)
|
||||||
defer_powernet_rebuild = 0
|
if(defer_powernet_rebuild != 2)
|
||||||
return
|
defer_powernet_rebuild = 0
|
||||||
|
return
|
||||||
|
|||||||
@@ -24,328 +24,328 @@
|
|||||||
var/obj/machinery/power/terminal/terminal = null
|
var/obj/machinery/power/terminal/terminal = null
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/smes/New()
|
||||||
..()
|
..()
|
||||||
spawn(5)
|
spawn(5)
|
||||||
dir_loop:
|
dir_loop:
|
||||||
for(var/d in cardinal)
|
for(var/d in cardinal)
|
||||||
var/turf/T = get_step(src, d)
|
var/turf/T = get_step(src, d)
|
||||||
for(var/obj/machinery/power/terminal/term in T)
|
for(var/obj/machinery/power/terminal/term in T)
|
||||||
if(term && term.dir == turn(d, 180))
|
if(term && term.dir == turn(d, 180))
|
||||||
terminal = term
|
terminal = term
|
||||||
break dir_loop
|
break dir_loop
|
||||||
if(!terminal)
|
if(!terminal)
|
||||||
stat |= BROKEN
|
stat |= BROKEN
|
||||||
return
|
return
|
||||||
terminal.master = src
|
terminal.master = src
|
||||||
updateicon()
|
updateicon()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
proc/updateicon()
|
/obj/machinery/power/smes/proc/updateicon()
|
||||||
overlays = null
|
overlays = null
|
||||||
if(stat & BROKEN) return
|
if(stat & BROKEN) return
|
||||||
|
|
||||||
overlays += image('icons/obj/power.dmi', "smes-op[online]")
|
overlays += image('icons/obj/power.dmi', "smes-op[online]")
|
||||||
|
|
||||||
if(charging)
|
if(charging)
|
||||||
overlays += image('icons/obj/power.dmi', "smes-oc1")
|
overlays += image('icons/obj/power.dmi', "smes-oc1")
|
||||||
else
|
else
|
||||||
if(chargemode)
|
if(chargemode)
|
||||||
overlays += image('icons/obj/power.dmi', "smes-oc0")
|
overlays += image('icons/obj/power.dmi', "smes-oc0")
|
||||||
|
|
||||||
var/clevel = chargedisplay()
|
var/clevel = chargedisplay()
|
||||||
if(clevel>0)
|
if(clevel>0)
|
||||||
overlays += image('icons/obj/power.dmi', "smes-og[clevel]")
|
overlays += image('icons/obj/power.dmi', "smes-og[clevel]")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
proc/chargedisplay()
|
/obj/machinery/power/smes/proc/chargedisplay()
|
||||||
return round(5.5*charge/capacity)
|
return round(5.5*charge/capacity)
|
||||||
|
|
||||||
#define SMESRATE 0.05 // rate of internal charge to external power
|
#define SMESRATE 0.05 // rate of internal charge to external power
|
||||||
|
|
||||||
|
|
||||||
process()
|
/obj/machinery/power/smes/process()
|
||||||
|
|
||||||
if(stat & BROKEN) return
|
if(stat & BROKEN) return
|
||||||
|
|
||||||
//store machine state to see if we need to update the icon overlays
|
//store machine state to see if we need to update the icon overlays
|
||||||
var/last_disp = chargedisplay()
|
var/last_disp = chargedisplay()
|
||||||
var/last_chrg = charging
|
var/last_chrg = charging
|
||||||
var/last_onln = online
|
var/last_onln = online
|
||||||
|
|
||||||
if(terminal)
|
if(terminal)
|
||||||
var/excess = terminal.surplus()
|
var/excess = terminal.surplus()
|
||||||
|
|
||||||
if(charging)
|
if(charging)
|
||||||
if(excess >= 0) // if there's power available, try to charge
|
if(excess >= 0) // if there's power available, try to charge
|
||||||
|
|
||||||
var/load = min((capacity-charge)/SMESRATE, chargelevel) // charge at set rate, limited to spare capacity
|
var/load = min((capacity-charge)/SMESRATE, chargelevel) // charge at set rate, limited to spare capacity
|
||||||
|
|
||||||
charge += load * SMESRATE // increase the charge
|
charge += load * SMESRATE // increase the charge
|
||||||
|
|
||||||
add_load(load) // add the load to the terminal side network
|
add_load(load) // add the load to the terminal side network
|
||||||
|
|
||||||
else // if not enough capcity
|
else // if not enough capcity
|
||||||
charging = 0 // stop charging
|
charging = 0 // stop charging
|
||||||
chargecount = 0
|
chargecount = 0
|
||||||
|
|
||||||
else
|
else
|
||||||
if(chargemode)
|
if(chargemode)
|
||||||
if(chargecount > rand(3,6))
|
if(chargecount > rand(3,6))
|
||||||
charging = 1
|
charging = 1
|
||||||
chargecount = 0
|
|
||||||
|
|
||||||
if(excess > chargelevel)
|
|
||||||
chargecount++
|
|
||||||
else
|
|
||||||
chargecount = 0
|
|
||||||
else
|
|
||||||
chargecount = 0
|
chargecount = 0
|
||||||
|
|
||||||
if(online) // if outputting
|
if(excess > chargelevel)
|
||||||
lastout = min( charge/SMESRATE, output) //limit output to that stored
|
chargecount++
|
||||||
|
else
|
||||||
|
chargecount = 0
|
||||||
|
else
|
||||||
|
chargecount = 0
|
||||||
|
|
||||||
charge -= lastout*SMESRATE // reduce the storage (may be recovered in /restore() if excessive)
|
if(online) // if outputting
|
||||||
|
lastout = min( charge/SMESRATE, output) //limit output to that stored
|
||||||
|
|
||||||
add_avail(lastout) // add output to powernet (smes side)
|
charge -= lastout*SMESRATE // reduce the storage (may be recovered in /restore() if excessive)
|
||||||
|
|
||||||
if(charge < 0.0001)
|
add_avail(lastout) // add output to powernet (smes side)
|
||||||
online = 0 // stop output if charge falls to zero
|
|
||||||
|
|
||||||
// only update icon if state changed
|
if(charge < 0.0001)
|
||||||
if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online)
|
online = 0 // stop output if charge falls to zero
|
||||||
updateicon()
|
|
||||||
|
|
||||||
for(var/mob/M in viewers(1, src))
|
// only update icon if state changed
|
||||||
if ((M.client && M.machine == src))
|
if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online)
|
||||||
src.interact(M)
|
updateicon()
|
||||||
AutoUpdateAI(src)
|
|
||||||
return
|
for(var/mob/M in viewers(1, src))
|
||||||
|
if ((M.client && M.machine == src))
|
||||||
|
src.interact(M)
|
||||||
|
AutoUpdateAI(src)
|
||||||
|
return
|
||||||
|
|
||||||
// called after all power processes are finished
|
// called after all power processes are finished
|
||||||
// restores charge level to smes if there was excess this ptick
|
// restores charge level to smes if there was excess this ptick
|
||||||
|
|
||||||
|
|
||||||
proc/restore()
|
/obj/machinery/power/smes/proc/restore()
|
||||||
if(stat & BROKEN)
|
if(stat & BROKEN)
|
||||||
return
|
|
||||||
|
|
||||||
if(!online)
|
|
||||||
loaddemand = 0
|
|
||||||
return
|
|
||||||
|
|
||||||
var/excess = powernet.netexcess // this was how much wasn't used on the network last ptick, minus any removed by other SMESes
|
|
||||||
|
|
||||||
excess = min(lastout, excess) // clamp it to how much was actually output by this SMES last ptick
|
|
||||||
|
|
||||||
excess = min((capacity-charge)/SMESRATE, excess) // for safety, also limit recharge by space capacity of SMES (shouldn't happen)
|
|
||||||
|
|
||||||
// now recharge this amount
|
|
||||||
|
|
||||||
var/clev = chargedisplay()
|
|
||||||
|
|
||||||
charge += excess * SMESRATE
|
|
||||||
powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it
|
|
||||||
|
|
||||||
loaddemand = lastout-excess
|
|
||||||
|
|
||||||
if(clev != chargedisplay() )
|
|
||||||
updateicon()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(!online)
|
||||||
add_load(var/amount)
|
loaddemand = 0
|
||||||
if(terminal && terminal.powernet)
|
|
||||||
terminal.powernet.newload += amount
|
|
||||||
|
|
||||||
|
|
||||||
attack_ai(mob/user)
|
|
||||||
add_fingerprint(user)
|
|
||||||
if(stat & BROKEN) return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user)
|
|
||||||
add_fingerprint(user)
|
|
||||||
if(stat & BROKEN) return
|
|
||||||
|
|
||||||
if(ishuman(user))
|
|
||||||
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
|
||||||
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("SMES",src,user:wear_suit)
|
|
||||||
return
|
|
||||||
interact(user)
|
|
||||||
|
|
||||||
|
|
||||||
proc/interact(mob/user)
|
|
||||||
if(get_dist(src, user) > 1 && !istype(user, /mob/living/silicon/ai))
|
|
||||||
user.machine = null
|
|
||||||
user << browse(null, "window=smes")
|
|
||||||
return
|
|
||||||
|
|
||||||
user.machine = src
|
|
||||||
|
|
||||||
var/t = "<TT><B>SMES Power Storage Unit</B> [n_tag? "([n_tag])" : null]<HR><PRE>"
|
|
||||||
|
|
||||||
t += "Stored capacity : [round(100.0*charge/capacity, 0.1)]%<BR><BR>"
|
|
||||||
|
|
||||||
t += "Input: [charging ? "Charging" : "Not Charging"] [chargemode ? "<B>Auto</B> <A href = '?src=\ref[src];cmode=1'>Off</A>" : "<A href = '?src=\ref[src];cmode=1'>Auto</A> <B>Off</B> "]<BR>"
|
|
||||||
|
|
||||||
|
|
||||||
t += "Input level: <A href = '?src=\ref[src];input=-4'>M</A> <A href = '?src=\ref[src];input=-3'>-</A> <A href = '?src=\ref[src];input=-2'>-</A> <A href = '?src=\ref[src];input=-1'>-</A> [add_lspace(chargelevel,5)] <A href = '?src=\ref[src];input=1'>+</A> <A href = '?src=\ref[src];input=2'>+</A> <A href = '?src=\ref[src];input=3'>+</A> <A href = '?src=\ref[src];input=4'>M</A><BR>"
|
|
||||||
|
|
||||||
t += "<BR><BR>"
|
|
||||||
|
|
||||||
t += "Output: [online ? "<B>Online</B> <A href = '?src=\ref[src];online=1'>Offline</A>" : "<A href = '?src=\ref[src];online=1'>Online</A> <B>Offline</B> "]<BR>"
|
|
||||||
|
|
||||||
t += "Output level: <A href = '?src=\ref[src];output=-4'>M</A> <A href = '?src=\ref[src];output=-3'>-</A> <A href = '?src=\ref[src];output=-2'>-</A> <A href = '?src=\ref[src];output=-1'>-</A> [add_lspace(output,5)] <A href = '?src=\ref[src];output=1'>+</A> <A href = '?src=\ref[src];output=2'>+</A> <A href = '?src=\ref[src];output=3'>+</A> <A href = '?src=\ref[src];output=4'>M</A><BR>"
|
|
||||||
|
|
||||||
t += "Output load: [round(loaddemand)] W<BR>"
|
|
||||||
|
|
||||||
t += "<BR></PRE><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
|
||||||
|
|
||||||
t += "</TT>"
|
|
||||||
user << browse(t, "window=smes;size=460x300")
|
|
||||||
onclose(user, "smes")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
var/excess = powernet.netexcess // this was how much wasn't used on the network last ptick, minus any removed by other SMESes
|
||||||
|
|
||||||
Topic(href, href_list)
|
excess = min(lastout, excess) // clamp it to how much was actually output by this SMES last ptick
|
||||||
..()
|
|
||||||
|
|
||||||
if (usr.stat || usr.restrained() )
|
excess = min((capacity-charge)/SMESRATE, excess) // for safety, also limit recharge by space capacity of SMES (shouldn't happen)
|
||||||
|
|
||||||
|
// now recharge this amount
|
||||||
|
|
||||||
|
var/clev = chargedisplay()
|
||||||
|
|
||||||
|
charge += excess * SMESRATE
|
||||||
|
powernet.netexcess -= excess // remove the excess from the powernet, so later SMESes don't try to use it
|
||||||
|
|
||||||
|
loaddemand = lastout-excess
|
||||||
|
|
||||||
|
if(clev != chargedisplay() )
|
||||||
|
updateicon()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/smes/add_load(var/amount)
|
||||||
|
if(terminal && terminal.powernet)
|
||||||
|
terminal.powernet.newload += amount
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/smes/attack_ai(mob/user)
|
||||||
|
add_fingerprint(user)
|
||||||
|
if(stat & BROKEN) return
|
||||||
|
interact(user)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/smes/attack_hand(mob/user)
|
||||||
|
add_fingerprint(user)
|
||||||
|
if(stat & BROKEN) return
|
||||||
|
|
||||||
|
if(ishuman(user))
|
||||||
|
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
|
||||||
|
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("SMES",src,user:wear_suit)
|
||||||
return
|
return
|
||||||
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
interact(user)
|
||||||
if(!istype(usr, /mob/living/silicon/ai))
|
|
||||||
usr << "\red You don't have the dexterity to do this!"
|
|
||||||
return
|
|
||||||
|
|
||||||
//world << "[href] ; [href_list[href]]"
|
|
||||||
|
|
||||||
if (( usr.machine==src && ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
|
||||||
|
|
||||||
|
|
||||||
if( href_list["close"] )
|
/obj/machinery/power/smes/proc/interact(mob/user)
|
||||||
usr << browse(null, "window=smes")
|
if(get_dist(src, user) > 1 && !istype(user, /mob/living/silicon/ai))
|
||||||
usr.machine = null
|
user.machine = null
|
||||||
return
|
user << browse(null, "window=smes")
|
||||||
|
return
|
||||||
|
|
||||||
else if( href_list["cmode"] )
|
user.machine = src
|
||||||
chargemode = !chargemode
|
|
||||||
if(!chargemode)
|
|
||||||
charging = 0
|
|
||||||
updateicon()
|
|
||||||
|
|
||||||
else if( href_list["online"] )
|
var/t = "<TT><B>SMES Power Storage Unit</B> [n_tag? "([n_tag])" : null]<HR><PRE>"
|
||||||
online = !online
|
|
||||||
updateicon()
|
|
||||||
else if( href_list["input"] )
|
|
||||||
|
|
||||||
var/i = text2num(href_list["input"])
|
t += "Stored capacity : [round(100.0*charge/capacity, 0.1)]%<BR><BR>"
|
||||||
|
|
||||||
var/d = 0
|
t += "Input: [charging ? "Charging" : "Not Charging"] [chargemode ? "<B>Auto</B> <A href = '?src=\ref[src];cmode=1'>Off</A>" : "<A href = '?src=\ref[src];cmode=1'>Auto</A> <B>Off</B> "]<BR>"
|
||||||
switch(i)
|
|
||||||
if(-4)
|
|
||||||
chargelevel = 0
|
|
||||||
if(4)
|
|
||||||
chargelevel = SMESMAXCHARGELEVEL //30000
|
|
||||||
|
|
||||||
if(1)
|
|
||||||
d = 100
|
|
||||||
if(-1)
|
|
||||||
d = -100
|
|
||||||
if(2)
|
|
||||||
d = 1000
|
|
||||||
if(-2)
|
|
||||||
d = -1000
|
|
||||||
if(3)
|
|
||||||
d = 10000
|
|
||||||
if(-3)
|
|
||||||
d = -10000
|
|
||||||
|
|
||||||
chargelevel += d
|
t += "Input level: <A href = '?src=\ref[src];input=-4'>M</A> <A href = '?src=\ref[src];input=-3'>-</A> <A href = '?src=\ref[src];input=-2'>-</A> <A href = '?src=\ref[src];input=-1'>-</A> [add_lspace(chargelevel,5)] <A href = '?src=\ref[src];input=1'>+</A> <A href = '?src=\ref[src];input=2'>+</A> <A href = '?src=\ref[src];input=3'>+</A> <A href = '?src=\ref[src];input=4'>M</A><BR>"
|
||||||
chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range
|
|
||||||
|
|
||||||
else if( href_list["output"] )
|
t += "<BR><BR>"
|
||||||
|
|
||||||
var/i = text2num(href_list["output"])
|
t += "Output: [online ? "<B>Online</B> <A href = '?src=\ref[src];online=1'>Offline</A>" : "<A href = '?src=\ref[src];online=1'>Online</A> <B>Offline</B> "]<BR>"
|
||||||
|
|
||||||
var/d = 0
|
t += "Output level: <A href = '?src=\ref[src];output=-4'>M</A> <A href = '?src=\ref[src];output=-3'>-</A> <A href = '?src=\ref[src];output=-2'>-</A> <A href = '?src=\ref[src];output=-1'>-</A> [add_lspace(output,5)] <A href = '?src=\ref[src];output=1'>+</A> <A href = '?src=\ref[src];output=2'>+</A> <A href = '?src=\ref[src];output=3'>+</A> <A href = '?src=\ref[src];output=4'>M</A><BR>"
|
||||||
switch(i)
|
|
||||||
if(-4)
|
|
||||||
output = 0
|
|
||||||
if(4)
|
|
||||||
output = SMESMAXOUTPUT //30000
|
|
||||||
|
|
||||||
if(1)
|
t += "Output load: [round(loaddemand)] W<BR>"
|
||||||
d = 100
|
|
||||||
if(-1)
|
|
||||||
d = -100
|
|
||||||
if(2)
|
|
||||||
d = 1000
|
|
||||||
if(-2)
|
|
||||||
d = -1000
|
|
||||||
if(3)
|
|
||||||
d = 10000
|
|
||||||
if(-3)
|
|
||||||
d = -10000
|
|
||||||
|
|
||||||
output += d
|
t += "<BR></PRE><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
||||||
output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
|
|
||||||
|
|
||||||
investigate_log("input/output; [chargelevel>output?"<font color='green'>":"<font color='red'>"][chargelevel]/[output]</font> | Output-mode: [online?"<font color='green'>on</font>":"<font color='red'>off</font>"] | Input-mode: [chargemode?"<font color='green'>auto</font>":"<font color='red'>off</font>"] by [usr.key]","singulo")
|
t += "</TT>"
|
||||||
src.updateUsrDialog()
|
user << browse(t, "window=smes;size=460x300")
|
||||||
|
onclose(user, "smes")
|
||||||
|
return
|
||||||
|
|
||||||
else
|
|
||||||
|
/obj/machinery/power/smes/Topic(href, href_list)
|
||||||
|
..()
|
||||||
|
|
||||||
|
if (usr.stat || usr.restrained() )
|
||||||
|
return
|
||||||
|
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||||
|
if(!istype(usr, /mob/living/silicon/ai))
|
||||||
|
usr << "\red You don't have the dexterity to do this!"
|
||||||
|
return
|
||||||
|
|
||||||
|
//world << "[href] ; [href_list[href]]"
|
||||||
|
|
||||||
|
if (( usr.machine==src && ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
||||||
|
|
||||||
|
|
||||||
|
if( href_list["close"] )
|
||||||
usr << browse(null, "window=smes")
|
usr << browse(null, "window=smes")
|
||||||
usr.machine = null
|
usr.machine = null
|
||||||
return
|
return
|
||||||
|
|
||||||
|
else if( href_list["cmode"] )
|
||||||
|
chargemode = !chargemode
|
||||||
|
if(!chargemode)
|
||||||
|
charging = 0
|
||||||
|
updateicon()
|
||||||
|
|
||||||
|
else if( href_list["online"] )
|
||||||
|
online = !online
|
||||||
|
updateicon()
|
||||||
|
else if( href_list["input"] )
|
||||||
|
|
||||||
|
var/i = text2num(href_list["input"])
|
||||||
|
|
||||||
|
var/d = 0
|
||||||
|
switch(i)
|
||||||
|
if(-4)
|
||||||
|
chargelevel = 0
|
||||||
|
if(4)
|
||||||
|
chargelevel = SMESMAXCHARGELEVEL //30000
|
||||||
|
|
||||||
|
if(1)
|
||||||
|
d = 100
|
||||||
|
if(-1)
|
||||||
|
d = -100
|
||||||
|
if(2)
|
||||||
|
d = 1000
|
||||||
|
if(-2)
|
||||||
|
d = -1000
|
||||||
|
if(3)
|
||||||
|
d = 10000
|
||||||
|
if(-3)
|
||||||
|
d = -10000
|
||||||
|
|
||||||
|
chargelevel += d
|
||||||
|
chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range
|
||||||
|
|
||||||
|
else if( href_list["output"] )
|
||||||
|
|
||||||
|
var/i = text2num(href_list["output"])
|
||||||
|
|
||||||
|
var/d = 0
|
||||||
|
switch(i)
|
||||||
|
if(-4)
|
||||||
|
output = 0
|
||||||
|
if(4)
|
||||||
|
output = SMESMAXOUTPUT //30000
|
||||||
|
|
||||||
|
if(1)
|
||||||
|
d = 100
|
||||||
|
if(-1)
|
||||||
|
d = -100
|
||||||
|
if(2)
|
||||||
|
d = 1000
|
||||||
|
if(-2)
|
||||||
|
d = -1000
|
||||||
|
if(3)
|
||||||
|
d = 10000
|
||||||
|
if(-3)
|
||||||
|
d = -10000
|
||||||
|
|
||||||
|
output += d
|
||||||
|
output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
|
||||||
|
|
||||||
|
investigate_log("input/output; [chargelevel>output?"<font color='green'>":"<font color='red'>"][chargelevel]/[output]</font> | Output-mode: [online?"<font color='green'>on</font>":"<font color='red'>off</font>"] | Input-mode: [chargemode?"<font color='green'>auto</font>":"<font color='red'>off</font>"] by [usr.key]","singulo")
|
||||||
|
src.updateUsrDialog()
|
||||||
|
|
||||||
|
else
|
||||||
|
usr << browse(null, "window=smes")
|
||||||
|
usr.machine = null
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
proc/ion_act()
|
/obj/machinery/power/smes/proc/ion_act()
|
||||||
if(src.z == 1)
|
if(src.z == 1)
|
||||||
if(prob(1)) //explosion
|
if(prob(1)) //explosion
|
||||||
world << "\red SMES explosion in [src.loc.loc]"
|
world << "\red SMES explosion in [src.loc.loc]"
|
||||||
for(var/mob/M in viewers(src))
|
for(var/mob/M in viewers(src))
|
||||||
M.show_message("\red The [src.name] is making strange noises!", 3, "\red You hear sizzling electronics.", 2)
|
M.show_message("\red The [src.name] is making strange noises!", 3, "\red You hear sizzling electronics.", 2)
|
||||||
sleep(10*pick(4,5,6,7,10,14))
|
sleep(10*pick(4,5,6,7,10,14))
|
||||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
||||||
smoke.set_up(3, 0, src.loc)
|
smoke.set_up(3, 0, src.loc)
|
||||||
smoke.attach(src)
|
smoke.attach(src)
|
||||||
smoke.start()
|
smoke.start()
|
||||||
explosion(src.loc, -1, 0, 1, 3, 0)
|
explosion(src.loc, -1, 0, 1, 3, 0)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
if(prob(15)) //Power drain
|
if(prob(15)) //Power drain
|
||||||
world << "\red SMES power drain in [src.loc.loc]"
|
world << "\red SMES power drain in [src.loc.loc]"
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
s.set_up(3, 1, src)
|
s.set_up(3, 1, src)
|
||||||
s.start()
|
s.start()
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
emp_act(1)
|
emp_act(1)
|
||||||
else
|
else
|
||||||
emp_act(2)
|
emp_act(2)
|
||||||
if(prob(5)) //smoke only
|
if(prob(5)) //smoke only
|
||||||
world << "\red SMES smoke in [src.loc.loc]"
|
world << "\red SMES smoke in [src.loc.loc]"
|
||||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
||||||
smoke.set_up(3, 0, src.loc)
|
smoke.set_up(3, 0, src.loc)
|
||||||
smoke.attach(src)
|
smoke.attach(src)
|
||||||
smoke.start()
|
smoke.start()
|
||||||
|
|
||||||
|
|
||||||
emp_act(severity)
|
/obj/machinery/power/smes/emp_act(severity)
|
||||||
online = 0
|
online = 0
|
||||||
charging = 0
|
charging = 0
|
||||||
output = 0
|
output = 0
|
||||||
charge -= 1e6/severity
|
charge -= 1e6/severity
|
||||||
if (charge < 0)
|
if (charge < 0)
|
||||||
charge = 0
|
charge = 0
|
||||||
spawn(100)
|
spawn(100)
|
||||||
output = initial(output)
|
output = initial(output)
|
||||||
charging = initial(charging)
|
charging = initial(charging)
|
||||||
online = initial(online)
|
online = initial(online)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,129 +20,124 @@
|
|||||||
var/ndir = SOUTH
|
var/ndir = SOUTH
|
||||||
var/turn_angle = 0
|
var/turn_angle = 0
|
||||||
var/obj/machinery/power/solar_control/control = null
|
var/obj/machinery/power/solar_control/control = null
|
||||||
proc
|
|
||||||
healthcheck()
|
|
||||||
|
/obj/machinery/power/solar/New()
|
||||||
|
..()
|
||||||
|
spawn(10)
|
||||||
updateicon()
|
updateicon()
|
||||||
update_solar_exposure()
|
update_solar_exposure()
|
||||||
broken()
|
if(powernet)
|
||||||
|
for(var/obj/machinery/power/solar_control/SC in powernet.nodes)
|
||||||
|
if(SC.id == id)
|
||||||
|
control = SC
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
|
||||||
..()
|
..()
|
||||||
spawn(10)
|
if (W)
|
||||||
updateicon()
|
src.add_fingerprint(user)
|
||||||
update_solar_exposure()
|
src.health -= W.force
|
||||||
if(powernet)
|
|
||||||
for(var/obj/machinery/power/solar_control/SC in powernet.nodes)
|
|
||||||
if(SC.id == id)
|
|
||||||
control = SC
|
|
||||||
|
|
||||||
|
|
||||||
attackby(obj/item/weapon/W, mob/user)
|
|
||||||
..()
|
|
||||||
if (W)
|
|
||||||
src.add_fingerprint(user)
|
|
||||||
src.health -= W.force
|
|
||||||
src.healthcheck()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
|
||||||
src.health--
|
|
||||||
src.healthcheck()
|
src.healthcheck()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
healthcheck()
|
/obj/machinery/power/solar/blob_act()
|
||||||
if (src.health <= 0)
|
src.health--
|
||||||
if(!(stat & BROKEN))
|
src.healthcheck()
|
||||||
broken()
|
return
|
||||||
else
|
|
||||||
new /obj/item/weapon/shard(src.loc)
|
|
||||||
new /obj/item/weapon/shard(src.loc)
|
|
||||||
del(src)
|
|
||||||
return
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
updateicon()
|
/obj/machinery/power/solar/proc/healthcheck()
|
||||||
overlays = null
|
if (src.health <= 0)
|
||||||
if(stat & BROKEN)
|
if(!(stat & BROKEN))
|
||||||
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
|
|
||||||
else
|
|
||||||
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
|
|
||||||
src.dir = angle2dir(adir)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
update_solar_exposure()
|
|
||||||
if(!sun)
|
|
||||||
return
|
|
||||||
if(obscured)
|
|
||||||
sunfrac = 0
|
|
||||||
return
|
|
||||||
var/p_angle = abs((360+adir)%360 - (360+sun.angle)%360)
|
|
||||||
if(p_angle > 90) // if facing more than 90deg from sun, zero output
|
|
||||||
sunfrac = 0
|
|
||||||
return
|
|
||||||
sunfrac = cos(p_angle) ** 2
|
|
||||||
|
|
||||||
|
|
||||||
process()
|
|
||||||
if(stat & BROKEN) return
|
|
||||||
if(!control) return
|
|
||||||
if(obscured) return
|
|
||||||
|
|
||||||
var/sgen = SOLARGENRATE * sunfrac
|
|
||||||
add_avail(sgen)
|
|
||||||
if(powernet && control)
|
|
||||||
if(control in powernet.nodes) //this line right here...
|
|
||||||
control.gen += sgen
|
|
||||||
|
|
||||||
if(adir != ndir)
|
|
||||||
spawn(10+rand(0,15))
|
|
||||||
adir = (360+adir+dd_range(-10,10,ndir-adir))%360
|
|
||||||
updateicon()
|
|
||||||
update_solar_exposure()
|
|
||||||
|
|
||||||
|
|
||||||
broken()
|
|
||||||
stat |= BROKEN
|
|
||||||
updateicon()
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
meteorhit()
|
|
||||||
if(stat & !BROKEN)
|
|
||||||
broken()
|
broken()
|
||||||
else
|
else
|
||||||
|
new /obj/item/weapon/shard(src.loc)
|
||||||
|
new /obj/item/weapon/shard(src.loc)
|
||||||
del(src)
|
del(src)
|
||||||
|
return
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
ex_act(severity)
|
/obj/machinery/power/solar/proc/updateicon()
|
||||||
switch(severity)
|
overlays = null
|
||||||
if(1.0)
|
if(stat & BROKEN)
|
||||||
del(src)
|
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
|
||||||
if(prob(15))
|
else
|
||||||
new /obj/item/weapon/shard( src.loc )
|
overlays += image('icons/obj/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
|
||||||
return
|
src.dir = angle2dir(adir)
|
||||||
if(2.0)
|
return
|
||||||
if (prob(25))
|
|
||||||
new /obj/item/weapon/shard( src.loc )
|
|
||||||
del(src)
|
/obj/machinery/power/solar/proc/update_solar_exposure()
|
||||||
return
|
if(!sun)
|
||||||
if (prob(50))
|
|
||||||
broken()
|
|
||||||
if(3.0)
|
|
||||||
if (prob(25))
|
|
||||||
broken()
|
|
||||||
return
|
return
|
||||||
|
if(obscured)
|
||||||
|
sunfrac = 0
|
||||||
|
return
|
||||||
|
var/p_angle = abs((360+adir)%360 - (360+sun.angle)%360)
|
||||||
|
if(p_angle > 90) // if facing more than 90deg from sun, zero output
|
||||||
|
sunfrac = 0
|
||||||
|
return
|
||||||
|
sunfrac = cos(p_angle) ** 2
|
||||||
|
|
||||||
|
|
||||||
blob_act()
|
/obj/machinery/power/solar/process()
|
||||||
if(prob(75))
|
if(stat & BROKEN) return
|
||||||
broken()
|
if(!control) return
|
||||||
src.density = 0
|
if(obscured) return
|
||||||
|
|
||||||
|
var/sgen = SOLARGENRATE * sunfrac
|
||||||
|
add_avail(sgen)
|
||||||
|
if(powernet && control)
|
||||||
|
if(control in powernet.nodes) //this line right here...
|
||||||
|
control.gen += sgen
|
||||||
|
|
||||||
|
if(adir != ndir)
|
||||||
|
spawn(10+rand(0,15))
|
||||||
|
adir = (360+adir+dd_range(-10,10,ndir-adir))%360
|
||||||
|
updateicon()
|
||||||
|
update_solar_exposure()
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/solar/proc/broken()
|
||||||
|
stat |= BROKEN
|
||||||
|
updateicon()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/solar/meteorhit()
|
||||||
|
if(stat & !BROKEN)
|
||||||
|
broken()
|
||||||
|
else
|
||||||
|
del(src)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/solar/ex_act(severity)
|
||||||
|
switch(severity)
|
||||||
|
if(1.0)
|
||||||
|
del(src)
|
||||||
|
if(prob(15))
|
||||||
|
new /obj/item/weapon/shard( src.loc )
|
||||||
|
return
|
||||||
|
if(2.0)
|
||||||
|
if (prob(25))
|
||||||
|
new /obj/item/weapon/shard( src.loc )
|
||||||
|
del(src)
|
||||||
|
return
|
||||||
|
if (prob(50))
|
||||||
|
broken()
|
||||||
|
if(3.0)
|
||||||
|
if (prob(25))
|
||||||
|
broken()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/machinery/power/solar/blob_act()
|
||||||
|
if(prob(75))
|
||||||
|
broken()
|
||||||
|
src.density = 0
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/solar/fake/process()
|
/obj/machinery/power/solar/fake/process()
|
||||||
|
|||||||
@@ -16,69 +16,69 @@
|
|||||||
var/on = 0 //up is off, down is on
|
var/on = 0 //up is off, down is on
|
||||||
var/busy = 0 //set to 1 when you start pulling
|
var/busy = 0 //set to 1 when you start pulling
|
||||||
|
|
||||||
simple
|
/obj/structure/powerswitch/simple
|
||||||
icon_state = "switch-up"
|
icon_state = "switch-up"
|
||||||
icon_state_on = "switch-down"
|
icon_state_on = "switch-down"
|
||||||
icon_state_off = "switch-up"
|
icon_state_off = "switch-up"
|
||||||
|
|
||||||
|
|
||||||
examine()
|
/obj/structure/powerswitch/examine()
|
||||||
..()
|
..()
|
||||||
if(on)
|
if(on)
|
||||||
usr << "The switch is in the on position"
|
usr << "The switch is in the on position"
|
||||||
else
|
else
|
||||||
usr << "The switch is in the off position"
|
usr << "The switch is in the off position"
|
||||||
|
|
||||||
attack_ai(mob/user)
|
/obj/structure/powerswitch/attack_ai(mob/user)
|
||||||
user << "\red You're an AI. This is a manual switch. It's not going to work."
|
user << "\red You're an AI. This is a manual switch. It's not going to work."
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/structure/powerswitch/attack_hand(mob/user)
|
||||||
|
|
||||||
|
if(busy)
|
||||||
|
user << "\red This switch is already being toggled."
|
||||||
return
|
return
|
||||||
|
|
||||||
attack_hand(mob/user)
|
..()
|
||||||
|
|
||||||
if(busy)
|
busy = 1
|
||||||
user << "\red This switch is already being toggled."
|
for(var/mob/O in viewers(user))
|
||||||
return
|
O.show_message(text("\red [user] started pulling the [src]."), 1)
|
||||||
|
|
||||||
..()
|
if(do_after(user, 50))
|
||||||
|
set_state(!on)
|
||||||
busy = 1
|
|
||||||
for(var/mob/O in viewers(user))
|
for(var/mob/O in viewers(user))
|
||||||
O.show_message(text("\red [user] started pulling the [src]."), 1)
|
O.show_message(text("\red [user] flipped the [src] into the [on ? "on": "off"] position."), 1)
|
||||||
|
busy = 0
|
||||||
|
|
||||||
if(do_after(user, 50))
|
/obj/structure/powerswitch/proc/set_state(var/state)
|
||||||
set_state(!on)
|
on = state
|
||||||
for(var/mob/O in viewers(user))
|
if(on)
|
||||||
O.show_message(text("\red [user] flipped the [src] into the [on ? "on": "off"] position."), 1)
|
icon_state = icon_state_on
|
||||||
busy = 0
|
var/list/connection_dirs = list()
|
||||||
|
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||||
|
for(var/obj/structure/cable/C in get_step(src,direction))
|
||||||
|
if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180))
|
||||||
|
connection_dirs += direction
|
||||||
|
break
|
||||||
|
|
||||||
proc/set_state(var/state)
|
for(var/direction in connection_dirs)
|
||||||
on = state
|
var/obj/structure/cable/C = new/obj/structure/cable(src.loc)
|
||||||
if(on)
|
C.d1 = 0
|
||||||
icon_state = icon_state_on
|
C.d2 = direction
|
||||||
var/list/connection_dirs = list()
|
C.icon_state = "[C.d1]-[C.d2]"
|
||||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
C.power_switch = src
|
||||||
for(var/obj/structure/cable/C in get_step(src,direction))
|
|
||||||
if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180))
|
|
||||||
connection_dirs += direction
|
|
||||||
break
|
|
||||||
|
|
||||||
for(var/direction in connection_dirs)
|
var/datum/powernet/PN = new()
|
||||||
var/obj/structure/cable/C = new/obj/structure/cable(src.loc)
|
PN.number = powernets.len + 1
|
||||||
C.d1 = 0
|
powernets += PN
|
||||||
C.d2 = direction
|
C.netnum = PN.number
|
||||||
C.icon_state = "[C.d1]-[C.d2]"
|
PN.cables += C
|
||||||
C.power_switch = src
|
|
||||||
|
|
||||||
var/datum/powernet/PN = new()
|
C.mergeConnectedNetworks(C.d2)
|
||||||
PN.number = powernets.len + 1
|
C.mergeConnectedNetworksOnTurf()
|
||||||
powernets += PN
|
|
||||||
C.netnum = PN.number
|
|
||||||
PN.cables += C
|
|
||||||
|
|
||||||
C.mergeConnectedNetworks(C.d2)
|
else
|
||||||
C.mergeConnectedNetworksOnTurf()
|
icon_state = icon_state_off
|
||||||
|
for(var/obj/structure/cable/C in src.loc)
|
||||||
else
|
del(C)
|
||||||
icon_state = icon_state_off
|
|
||||||
for(var/obj/structure/cable/C in src.loc)
|
|
||||||
del(C)
|
|
||||||
@@ -15,18 +15,18 @@
|
|||||||
layer = 2.6 // a bit above wires
|
layer = 2.6 // a bit above wires
|
||||||
|
|
||||||
|
|
||||||
New()
|
/obj/machinery/power/terminal/New()
|
||||||
..()
|
..()
|
||||||
var/turf/T = src.loc
|
var/turf/T = src.loc
|
||||||
if(level==1) hide(T.intact)
|
if(level==1) hide(T.intact)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
hide(var/i)
|
/obj/machinery/power/terminal/hide(var/i)
|
||||||
if(i)
|
if(i)
|
||||||
invisibility = 101
|
invisibility = 101
|
||||||
icon_state = "term-f"
|
icon_state = "term-f"
|
||||||
else
|
else
|
||||||
invisibility = 0
|
invisibility = 0
|
||||||
icon_state = "term"
|
icon_state = "term"
|
||||||
|
|
||||||
|
|||||||
@@ -15,36 +15,36 @@
|
|||||||
var/sun_angle = 0 // sun angle as set by sun datum
|
var/sun_angle = 0 // sun angle as set by sun datum
|
||||||
|
|
||||||
|
|
||||||
// called by datum/sun/calc_position() as sun's angle changes
|
// called by datum/sun/calc_position() as sun's angle changes
|
||||||
proc/set_angle(var/angle)
|
/obj/machinery/power/tracker/proc/set_angle(var/angle)
|
||||||
sun_angle = angle
|
sun_angle = angle
|
||||||
|
|
||||||
//set icon dir to show sun illumination
|
//set icon dir to show sun illumination
|
||||||
dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST
|
dir = turn(NORTH, -angle - 22.5) // 22.5 deg bias ensures, e.g. 67.5-112.5 is EAST
|
||||||
|
|
||||||
// check we can draw power
|
// check we can draw power
|
||||||
if(stat & NOPOWER)
|
if(stat & NOPOWER)
|
||||||
return
|
|
||||||
|
|
||||||
// find all solar controls and update them
|
|
||||||
// currently, just update all controllers in world
|
|
||||||
// ***TODO: better communication system using network
|
|
||||||
if(powernet)
|
|
||||||
for(var/obj/machinery/power/solar_control/C in powernet.nodes)
|
|
||||||
C.tracker_update(angle)
|
|
||||||
|
|
||||||
|
|
||||||
// timed process
|
|
||||||
// make sure we can draw power from the powernet
|
|
||||||
process()
|
|
||||||
var/avail = surplus()
|
|
||||||
|
|
||||||
if(avail > 500)
|
|
||||||
add_load(500)
|
|
||||||
stat &= ~NOPOWER
|
|
||||||
else
|
|
||||||
stat |= NOPOWER
|
|
||||||
|
|
||||||
// override power change to do nothing since we don't care about area power
|
|
||||||
power_change()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
// find all solar controls and update them
|
||||||
|
// currently, just update all controllers in world
|
||||||
|
// ***TODO: better communication system using network
|
||||||
|
if(powernet)
|
||||||
|
for(var/obj/machinery/power/solar_control/C in powernet.nodes)
|
||||||
|
C.tracker_update(angle)
|
||||||
|
|
||||||
|
|
||||||
|
// timed process
|
||||||
|
// make sure we can draw power from the powernet
|
||||||
|
/obj/machinery/power/tracker/process()
|
||||||
|
var/avail = surplus()
|
||||||
|
|
||||||
|
if(avail > 500)
|
||||||
|
add_load(500)
|
||||||
|
stat &= ~NOPOWER
|
||||||
|
else
|
||||||
|
stat |= NOPOWER
|
||||||
|
|
||||||
|
// override power change to do nothing since we don't care about area power
|
||||||
|
/obj/machinery/power/tracker/power_change()
|
||||||
|
return
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 519 B After Width: | Height: | Size: 466 B |
@@ -14,197 +14,236 @@
|
|||||||
"an" = (/turf/simulated/floor,/area/lawoffice)
|
"an" = (/turf/simulated/floor,/area/lawoffice)
|
||||||
"ao" = (/turf/simulated/wall,/area/storage/eva)
|
"ao" = (/turf/simulated/wall,/area/storage/eva)
|
||||||
"ap" = (/turf/simulated/floor,/area/storage/eva)
|
"ap" = (/turf/simulated/floor,/area/storage/eva)
|
||||||
"aq" = (/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTH)"; icon_state = "pwall"; dir = 1},/area)
|
"aq" = (/obj/item/weapon/paper{name = "atmos room for cargo"},/turf/simulated/floor/plating,/area)
|
||||||
"ar" = (/turf/simulated/shuttle/floor,/area)
|
"ar" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plating,/area)
|
||||||
"as" = (/turf/simulated/wall,/area/security/detectives_office)
|
"as" = (/turf/simulated/shuttle/wall{tag = "icon-pwall (NORTH)"; icon_state = "pwall"; dir = 1},/area)
|
||||||
"at" = (/turf/simulated/wall,/area/quartermaster/qm)
|
"at" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 6},/turf/simulated/floor,/area)
|
||||||
"au" = (/turf/simulated/wall,/area/quartermaster/storage)
|
"au" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/floor/plating,/area)
|
||||||
"av" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area)
|
"av" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/turf/simulated/floor/plating,/area)
|
||||||
"aw" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area)
|
"aw" = (/turf/simulated/shuttle/floor,/area)
|
||||||
"ax" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area)
|
"ax" = (/obj/item/weapon/paper{name = "atmos room for mining"},/turf/simulated/floor/plating,/area)
|
||||||
"ay" = (/turf/simulated/floor,/area/security/detectives_office)
|
"ay" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor,/area)
|
||||||
"az" = (/turf/simulated/floor,/area/quartermaster/qm)
|
"az" = (/turf/simulated/wall,/area/security/detectives_office)
|
||||||
"aA" = (/turf/simulated/floor,/area/quartermaster/storage)
|
"aA" = (/turf/simulated/wall,/area/quartermaster/qm)
|
||||||
"aB" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area)
|
"aB" = (/turf/simulated/wall,/area/quartermaster/storage)
|
||||||
"aC" = (/turf/simulated/wall,/area/storage/primary)
|
"aC" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area)
|
||||||
"aD" = (/turf/simulated/floor/plating,/area/storage/primary)
|
"aD" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area)
|
||||||
"aE" = (/turf/simulated/floor/plating,/area/security/detectives_office)
|
"aE" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area)
|
||||||
"aF" = (/turf/simulated/floor,/area/storage/primary)
|
"aF" = (/turf/simulated/floor,/area/security/detectives_office)
|
||||||
"aG" = (/turf/simulated/wall,/area/quartermaster/miningdock)
|
"aG" = (/turf/simulated/floor,/area/quartermaster/qm)
|
||||||
"aH" = (/turf/simulated/floor/plating,/area/quartermaster/storage)
|
"aH" = (/turf/simulated/floor,/area/quartermaster/storage)
|
||||||
"aI" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor2"; name = "Supply Shuttle Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/shuttle/plating,/area)
|
"aI" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area)
|
||||||
"aJ" = (/turf/simulated/floor,/area/quartermaster/miningdock)
|
"aJ" = (/turf/simulated/wall,/area/storage/primary)
|
||||||
"aK" = (/turf/simulated/floor/plating,/area/quartermaster/miningdock)
|
"aK" = (/turf/simulated/floor/plating,/area/storage/primary)
|
||||||
"aL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area)
|
"aL" = (/turf/simulated/floor/plating,/area/security/detectives_office)
|
||||||
"aM" = (/turf/simulated/wall,/area/janitor)
|
"aM" = (/turf/simulated/floor,/area/storage/primary)
|
||||||
"aN" = (/turf/simulated/wall,/area/storage/art)
|
"aN" = (/turf/simulated/wall,/area/quartermaster/miningdock)
|
||||||
"aO" = (/turf/simulated/floor,/area/janitor)
|
"aO" = (/turf/simulated/floor/plating,/area/quartermaster/storage)
|
||||||
"aP" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Shuttle Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMLoad"},/turf/simulated/shuttle/plating,/area)
|
"aP" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor2"; name = "Supply Shuttle Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/shuttle/plating,/area)
|
||||||
"aQ" = (/turf/simulated/floor,/area/storage/art)
|
"aQ" = (/turf/simulated/floor,/area/quartermaster/miningdock)
|
||||||
"aR" = (/turf/simulated/floor/plating,/area/janitor)
|
"aR" = (/turf/simulated/floor/plating,/area/quartermaster/miningdock)
|
||||||
"aS" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area)
|
"aS" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 5},/turf/simulated/floor/plating,/area)
|
||||||
"aT" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_floor"; tag = ""},/area)
|
"aT" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 10},/turf/simulated/floor/plating,/area)
|
||||||
"aU" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall_floor"; tag = ""},/area)
|
"aU" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area)
|
||||||
"aV" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area)
|
"aV" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/floor,/area)
|
||||||
"aW" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area)
|
"aW" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden,/turf/simulated/floor,/area)
|
||||||
"aX" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"; dir = 2},/area)
|
"aX" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 10},/turf/simulated/floor,/area)
|
||||||
"aY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating,/area)
|
"aY" = (/turf/simulated/wall,/area/janitor)
|
||||||
"aZ" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area)
|
"aZ" = (/turf/simulated/wall,/area/storage/art)
|
||||||
"ba" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l"; icon_state = "burst_l"},/turf/space,/area)
|
"ba" = (/turf/simulated/floor,/area/janitor)
|
||||||
"bb" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area)
|
"bb" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Shuttle Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 8; id = "QMLoad"},/turf/simulated/shuttle/plating,/area)
|
||||||
"bc" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r"; icon_state = "burst_r"},/turf/space,/area)
|
"bc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor,/area)
|
||||||
"bd" = (/turf/simulated/wall,/area/crew_quarters/sleep_female)
|
"bd" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area)
|
||||||
"be" = (/turf/simulated/floor/plating,/area/crew_quarters/sleep_female)
|
"be" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor,/area)
|
||||||
"bf" = (/turf/simulated/floor{icon_state = "carpet"},/area/crew_quarters/sleep_female)
|
"bf" = (/turf/simulated/floor,/area/storage/art)
|
||||||
"bg" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/sleep_female)
|
"bg" = (/turf/simulated/floor/plating,/area/janitor)
|
||||||
"bh" = (/turf/simulated/wall,/area/crew_quarters/captain)
|
"bh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area)
|
||||||
"bi" = (/turf/simulated/floor/plating,/area/crew_quarters/captain)
|
"bi" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"; dir = 2},/area)
|
||||||
"bj" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
|
"bj" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_floor"; tag = ""},/area)
|
||||||
"bk" = (/turf/simulated/wall,/area/bridge)
|
"bk" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall_floor"; tag = ""},/area)
|
||||||
"bl" = (/turf/simulated/floor,/area/crew_quarters/sleep_female)
|
"bl" = (/turf/simulated/shuttle/wall{tag = "icon-swall11"; icon_state = "swall11"; dir = 2},/area)
|
||||||
"bm" = (/turf/simulated/floor,/area/bridge)
|
"bm" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area)
|
||||||
"bn" = (/turf/simulated/floor/plating,/area/bridge)
|
"bn" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"; dir = 2},/area)
|
||||||
"bo" = (/turf/simulated/floor/plating/airless,/area)
|
"bo" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating,/area)
|
||||||
"bp" = (/turf/simulated/wall,/area/storage/emergency)
|
"bp" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area)
|
||||||
"bq" = (/turf/simulated/floor,/area/storage/emergency)
|
"bq" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l"; icon_state = "burst_l"},/turf/space,/area)
|
||||||
"br" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/sleep_female)
|
"br" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area)
|
||||||
"bs" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep_female)
|
"bs" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_r"; icon_state = "burst_r"},/turf/space,/area)
|
||||||
"bt" = (/obj/machinery/field_generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area)
|
"bt" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/turf/simulated/floor,/area)
|
||||||
"bu" = (/turf/simulated/floor{icon_state = "wood"},/area/bridge)
|
"bu" = (/obj/item/weapon/paper{name = "atmos room for bridge"},/turf/simulated/floor/plating,/area)
|
||||||
"bv" = (/turf/simulated/wall,/area/security/main)
|
"bv" = (/turf/simulated/wall,/area/crew_quarters/sleep_female)
|
||||||
"bw" = (/turf/simulated/wall,/area/security/brig)
|
"bw" = (/turf/simulated/floor/plating,/area/crew_quarters/sleep_female)
|
||||||
"bx" = (/turf/simulated/floor,/area/security/main)
|
"bx" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 5},/turf/simulated/floor,/area)
|
||||||
"by" = (/turf/simulated/floor,/area/security/brig)
|
"by" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{dir = 4},/turf/simulated/floor,/area)
|
||||||
"bz" = (/turf/simulated/wall,/area/security/warden)
|
"bz" = (/turf/simulated/floor{icon_state = "carpet"},/area/crew_quarters/sleep_female)
|
||||||
"bA" = (/turf/simulated/wall,/area/engine/engineering)
|
"bA" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/sleep_female)
|
||||||
"bB" = (/turf/simulated/wall,/area/engine/chiefs_office)
|
"bB" = (/turf/simulated/wall,/area/crew_quarters/captain)
|
||||||
"bC" = (/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden)
|
"bC" = (/turf/simulated/floor/plating,/area/crew_quarters/captain)
|
||||||
"bD" = (/turf/simulated/floor,/area/engine/engineering)
|
"bD" = (/turf/simulated/floor/wood,/area/crew_quarters/captain)
|
||||||
"bE" = (/turf/simulated/floor,/area/engine/chiefs_office)
|
"bE" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor,/area)
|
||||||
"bF" = (/turf/simulated/wall,/area/crew_quarters/bar)
|
"bF" = (/turf/simulated/wall,/area/bridge)
|
||||||
"bG" = (/turf/simulated/floor/plating,/area/crew_quarters/bar)
|
"bG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor,/area)
|
||||||
"bH" = (/turf/simulated/wall,/area/crew_quarters/kitchen)
|
"bH" = (/turf/simulated/floor,/area/crew_quarters/sleep_female)
|
||||||
"bI" = (/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
|
"bI" = (/turf/simulated/floor,/area/bridge)
|
||||||
"bJ" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar)
|
"bJ" = (/turf/simulated/floor/plating,/area/bridge)
|
||||||
"bK" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/kitchen)
|
"bK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor,/area)
|
||||||
"bL" = (/turf/simulated/floor/plating,/area/engine/engineering)
|
"bL" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area)
|
||||||
"bM" = (/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
"bM" = (/turf/simulated/floor/plating/airless,/area)
|
||||||
"bN" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen)
|
"bN" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{dir = 1},/turf/simulated/floor,/area)
|
||||||
"bO" = (/obj/machinery/field_generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
"bO" = (/turf/simulated/wall,/area/storage/emergency)
|
||||||
"bP" = (/obj/structure/lattice,/turf/space,/area)
|
"bP" = (/turf/simulated/floor,/area/storage/emergency)
|
||||||
"bQ" = (/obj/structure/lattice{tag = "icon-lattice-simple (WEST)"; icon_state = "lattice-simple"; dir = 8},/turf/space,/area)
|
"bQ" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep_female)
|
||||||
"bR" = (/obj/item/weapon/wirecutters,/turf/space,/area)
|
"bR" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep_female)
|
||||||
"bS" = (/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
"bS" = (/obj/machinery/field_generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area)
|
||||||
"bT" = (/turf/simulated/wall,/area/crew_quarters/heads)
|
"bT" = (/turf/simulated/floor/wood,/area/bridge)
|
||||||
"bU" = (/turf/simulated/floor,/area/crew_quarters/heads)
|
"bU" = (/turf/simulated/wall,/area/security/main)
|
||||||
"bV" = (/obj/structure/lattice{tag = "icon-lattice-simple (WEST)"; icon_state = "lattice-simple"; dir = 8},/obj/item/weapon/crowbar,/turf/space,/area)
|
"bV" = (/obj/item/weapon/paper{name = "atmos room for security"},/turf/simulated/floor/plating,/area/security/main)
|
||||||
"bW" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
"bW" = (/turf/simulated/floor/plating,/area/security/main)
|
||||||
"bX" = (/obj/machinery/the_singularitygen{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
"bX" = (/turf/simulated/wall,/area/security/brig)
|
||||||
"bY" = (/obj/item/weapon/weldingtool,/turf/space,/area)
|
"bY" = (/turf/simulated/floor/plating,/area/security/brig)
|
||||||
"bZ" = (/turf/simulated/floor{icon_state = "dark"},/area/security/main)
|
"bZ" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{dir = 8},/turf/simulated/floor,/area)
|
||||||
"ca" = (/turf/simulated/floor/plating,/area/security/main)
|
"ca" = (/turf/simulated/wall,/area/security/warden)
|
||||||
"cb" = (/turf/simulated/wall,/area/security/hos)
|
"cb" = (/turf/simulated/floor,/area/security/main)
|
||||||
"cc" = (/turf/simulated/floor{icon_state = "wood"},/area/security/hos)
|
"cc" = (/turf/simulated/wall,/area/engine/engineering)
|
||||||
"cd" = (/turf/simulated/wall,/area/security/nuke_storage)
|
"cd" = (/turf/simulated/wall,/area/engine/chiefs_office)
|
||||||
"ce" = (/turf/simulated/floor{icon_state = "dark"},/area/security/nuke_storage)
|
"ce" = (/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden)
|
||||||
"cf" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/theatre)
|
"cf" = (/turf/simulated/floor,/area/engine/engineering)
|
||||||
"cg" = (/turf/simulated/wall,/area/bridge/meeting_room)
|
"cg" = (/turf/simulated/floor,/area/engine/chiefs_office)
|
||||||
"ch" = (/turf/simulated/floor,/area/bridge/meeting_room)
|
"ch" = (/turf/simulated/wall,/area/crew_quarters/bar)
|
||||||
"ci" = (/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
|
"ci" = (/turf/simulated/floor/plating,/area/crew_quarters/bar)
|
||||||
"cj" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 1},/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/shuttle/escape_pod1/station)
|
"cj" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plating,/area/crew_quarters/bar)
|
||||||
"ck" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
"ck" = (/turf/simulated/wall,/area/crew_quarters/kitchen)
|
||||||
"cl" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 1},/turf/space,/area/shuttle/escape_pod1/station)
|
"cl" = (/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
|
||||||
"cm" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod1/station)
|
"cm" = (/turf/simulated/floor,/area/security/brig)
|
||||||
"cn" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
"cn" = (/turf/simulated/floor/wood,/area/crew_quarters/bar)
|
||||||
"co" = (/turf/simulated/wall,/area/crew_quarters/theatre)
|
"co" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/kitchen)
|
||||||
"cp" = (/turf/simulated/floor/plating,/area/bridge/meeting_room)
|
"cp" = (/obj/item/weapon/paper{name = "atmos room for crew quarters"},/turf/simulated/floor/plating,/area/crew_quarters/bar)
|
||||||
"cq" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
"cq" = (/turf/simulated/floor/plating,/area/engine/engineering)
|
||||||
"cr" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/escape_pod1/station)
|
"cr" = (/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
||||||
"cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station)
|
"cs" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/kitchen)
|
||||||
"ct" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod1/station)
|
"ct" = (/obj/machinery/field_generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
||||||
"cu" = (/turf/simulated/wall,/area/hydroponics)
|
"cu" = (/obj/structure/lattice,/turf/space,/area)
|
||||||
"cv" = (/turf/simulated/floor/grass,/area/hydroponics)
|
"cv" = (/obj/structure/lattice{tag = "icon-lattice-simple (WEST)"; icon_state = "lattice-simple"; dir = 8},/turf/space,/area)
|
||||||
"cw" = (/turf/simulated/wall,/area/crew_quarters/sleep_male)
|
"cw" = (/obj/item/weapon/wirecutters,/turf/space,/area)
|
||||||
"cx" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/sleep_male)
|
"cx" = (/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar)
|
||||||
"cy" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep_male)
|
"cy" = (/turf/simulated/wall,/area/crew_quarters/heads)
|
||||||
"cz" = (/turf/simulated/floor,/area/hydroponics)
|
"cz" = (/turf/simulated/floor,/area/crew_quarters/heads)
|
||||||
"cA" = (/turf/simulated/floor,/area/crew_quarters/sleep_male)
|
"cA" = (/obj/structure/lattice{tag = "icon-lattice-simple (WEST)"; icon_state = "lattice-simple"; dir = 8},/obj/item/weapon/crowbar,/turf/space,/area)
|
||||||
"cB" = (/turf/simulated/floor{icon_state = "carpet"},/area/crew_quarters/sleep_male)
|
"cB" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
||||||
"cC" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/sleep_male)
|
"cC" = (/obj/machinery/the_singularitygen{anchored = 1},/turf/simulated/floor/plating/airless,/area/engine/engineering)
|
||||||
"cD" = (/turf/simulated/wall,/area/library)
|
"cD" = (/obj/item/weapon/weldingtool,/turf/space,/area)
|
||||||
"cE" = (/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/library)
|
"cE" = (/turf/simulated/floor{icon_state = "dark"},/area/security/main)
|
||||||
"cF" = (/turf/simulated/wall,/area/assembly/assembly_line)
|
"cF" = (/turf/simulated/wall,/area/security/hos)
|
||||||
"cG" = (/turf/simulated/floor/plating,/area/assembly/assembly_line)
|
"cG" = (/turf/simulated/floor/wood,/area/security/hos)
|
||||||
"cH" = (/turf/simulated/floor,/area/assembly/assembly_line)
|
"cH" = (/turf/simulated/wall,/area/security/nuke_storage)
|
||||||
"cI" = (/turf/simulated/wall,/area/medical/chemistry)
|
"cI" = (/turf/simulated/floor{icon_state = "dark"},/area/security/nuke_storage)
|
||||||
"cJ" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
|
"cJ" = (/turf/simulated/floor/wood,/area/crew_quarters/theatre)
|
||||||
"cK" = (/turf/simulated/wall,/area/medical/cryo)
|
"cK" = (/turf/simulated/wall,/area/bridge/meeting_room)
|
||||||
"cL" = (/turf/simulated/wall,/area/medical/morgue)
|
"cL" = (/turf/simulated/floor,/area/bridge/meeting_room)
|
||||||
"cM" = (/turf/simulated/floor{icon_state = "dark"},/area/medical/morgue)
|
"cM" = (/turf/simulated/floor{icon_state = "dark"},/area/security/hos)
|
||||||
"cN" = (/turf/simulated/floor/plating,/area/crew_quarters/sleep_male)
|
"cN" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 1},/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"cO" = (/turf/simulated/floor{icon_state = "wood"},/area/library)
|
"cO" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
||||||
"cP" = (/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
|
"cP" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 1},/turf/space,/area/shuttle/escape_pod1/station)
|
||||||
"cQ" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/assembly/assembly_line)
|
"cQ" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"cR" = (/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
"cR" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
||||||
"cS" = (/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
|
"cS" = (/turf/simulated/wall,/area/crew_quarters/theatre)
|
||||||
"cT" = (/turf/simulated/floor/plating,/area/library)
|
"cT" = (/turf/simulated/floor/plating,/area/bridge/meeting_room)
|
||||||
"cU" = (/turf/simulated/wall,/area/medical/genetics)
|
"cU" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
|
||||||
"cV" = (/turf/simulated/wall,/area/medical/patients_rooms)
|
"cV" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s5"; icon_state = "swall_s5"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"cW" = (/turf/simulated/floor/plating,/area/medical/medbay)
|
"cW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station)
|
||||||
"cX" = (/turf/simulated/wall,/area/medical/medbay)
|
"cX" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod1/station)
|
||||||
"cY" = (/turf/simulated/floor/plating,/area/medical/cryo)
|
"cY" = (/turf/simulated/wall,/area/hydroponics)
|
||||||
"cZ" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
|
"cZ" = (/turf/simulated/floor/grass,/area/hydroponics)
|
||||||
"da" = (/turf/simulated/floor{icon_state = "white"},/area/medical/patients_rooms)
|
"da" = (/turf/simulated/wall,/area/crew_quarters/sleep_male)
|
||||||
"db" = (/turf/simulated/floor{icon_state = "white"},/area/medical/morgue)
|
"db" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep_male)
|
||||||
"dc" = (/turf/simulated/floor/plating,/area/medical/genetics)
|
"dc" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep_male)
|
||||||
"dd" = (/turf/simulated/wall,/area/medical/exam_room)
|
"dd" = (/turf/simulated/floor,/area/hydroponics)
|
||||||
"de" = (/turf/simulated/floor{icon_state = "white"},/area/medical/exam_room)
|
"de" = (/turf/simulated/floor,/area/crew_quarters/sleep_male)
|
||||||
"df" = (/turf/simulated/wall,/area/toxins/lab)
|
"df" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 6},/turf/simulated/floor/plating,/area)
|
||||||
"dg" = (/turf/simulated/wall,/area/crew_quarters/hor)
|
"dg" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor,/area)
|
||||||
"dh" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
"dh" = (/turf/simulated/floor{icon_state = "carpet"},/area/crew_quarters/sleep_male)
|
||||||
"di" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/hor)
|
"di" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/sleep_male)
|
||||||
"dj" = (/turf/simulated/wall,/area/medical/cmo)
|
"dj" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area)
|
||||||
"dk" = (/turf/simulated/floor/plating,/area/medical/cmo)
|
"dk" = (/turf/simulated/wall,/area/library)
|
||||||
"dl" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo)
|
"dl" = (/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/library)
|
||||||
"dm" = (/turf/simulated/wall,/area/medical/surgery)
|
"dm" = (/turf/simulated/wall,/area/assembly/assembly_line)
|
||||||
"dn" = (/turf/simulated/floor{icon_state = "dark"},/area/medical/surgery)
|
"dn" = (/turf/simulated/floor/plating,/area/assembly/assembly_line)
|
||||||
"do" = (/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
|
"do" = (/turf/simulated/floor,/area/assembly/assembly_line)
|
||||||
"dp" = (/turf/simulated/wall,/area/medical/virology)
|
"dp" = (/turf/simulated/wall,/area/medical/chemistry)
|
||||||
"dq" = (/turf/simulated/wall,/area/turret_protected/ai)
|
"dq" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
|
||||||
"dr" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
|
"dr" = (/turf/simulated/wall,/area/medical/cryo)
|
||||||
"ds" = (/turf/simulated/floor/plating,/area/medical/surgery)
|
"ds" = (/turf/simulated/wall,/area/medical/morgue)
|
||||||
"dt" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
|
"dt" = (/turf/simulated/floor{icon_state = "dark"},/area/medical/morgue)
|
||||||
"du" = (/turf/simulated/floor/plating,/area/medical/virology)
|
"du" = (/turf/simulated/floor/plating,/area/crew_quarters/sleep_male)
|
||||||
"dv" = (/turf/simulated/floor/plating,/area/toxins/lab)
|
"dv" = (/turf/simulated/floor/wood,/area/library)
|
||||||
"dw" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/lab)
|
"dw" = (/turf/simulated/floor{icon_state = "white"},/area/assembly/assembly_line)
|
||||||
"dx" = (/turf/simulated/wall,/area/toxins/xenobiology)
|
"dx" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/assembly/assembly_line)
|
||||||
"dy" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology)
|
"dy" = (/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
|
||||||
"dz" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
"dz" = (/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
|
||||||
"dA" = (/turf/space,/area/toxins/test_area)
|
"dA" = (/turf/simulated/floor/plating,/area/library)
|
||||||
"dB" = (/turf/simulated/wall/r_wall,/area/atmos)
|
"dB" = (/turf/simulated/wall,/area/medical/genetics)
|
||||||
"dC" = (/turf/simulated/floor/engine,/area/atmos)
|
"dC" = (/turf/simulated/wall,/area/medical/patients_rooms)
|
||||||
"dD" = (/turf/simulated/wall,/area/toxins/mixing)
|
"dD" = (/turf/simulated/floor/plating,/area/medical/medbay)
|
||||||
"dE" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
|
"dE" = (/turf/simulated/wall,/area/medical/medbay)
|
||||||
"dF" = (/turf/simulated/wall,/area/atmos)
|
"dF" = (/turf/simulated/floor/plating,/area/medical/cryo)
|
||||||
"dG" = (/turf/simulated/floor,/area/atmos)
|
"dG" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
|
||||||
"dH" = (/turf/simulated/floor/plating,/area/atmos)
|
"dH" = (/turf/simulated/floor{icon_state = "white"},/area/medical/patients_rooms)
|
||||||
"dI" = (/turf/simulated/floor/plating,/area/toxins/mixing)
|
"dI" = (/turf/simulated/floor{icon_state = "white"},/area/medical/morgue)
|
||||||
"dJ" = (/turf/simulated/floor,/area/toxins/lab)
|
"dJ" = (/obj/item/weapon/paper{name = "atmos room for medbay"},/turf/simulated/floor/plating,/area)
|
||||||
"dK" = (/turf/simulated/wall,/area/toxins/storage)
|
"dK" = (/turf/simulated/floor/plating,/area/medical/genetics)
|
||||||
"dL" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/storage)
|
"dL" = (/turf/simulated/wall,/area/medical/exam_room)
|
||||||
"dM" = (/turf/simulated/wall,/area/toxins/server)
|
"dM" = (/turf/simulated/floor{icon_state = "white"},/area/medical/exam_room)
|
||||||
"dN" = (/turf/simulated/floor/bluegrid,/area/toxins/server)
|
"dN" = (/turf/simulated/wall,/area/toxins/lab)
|
||||||
"dO" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/storage)
|
"dO" = (/turf/simulated/wall,/area/crew_quarters/hor)
|
||||||
"dP" = (/turf/simulated/wall/r_wall,/area/chapel/main)
|
"dP" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/lab)
|
||||||
"dQ" = (/turf/simulated/floor{icon_state = "carpet"},/area/chapel/main)
|
"dQ" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/hor)
|
||||||
"dR" = (/turf/simulated/wall,/area/chapel/main)
|
"dR" = (/obj/item/weapon/paper{name = "atmos room for science wing"},/turf/simulated/floor/plating,/area)
|
||||||
"dS" = (/turf/simulated/floor/plating,/area/chapel/main)
|
"dS" = (/turf/simulated/wall,/area/medical/cmo)
|
||||||
"dT" = (/turf/simulated/wall,/area/crew_quarters/locker)
|
"dT" = (/turf/simulated/floor/plating,/area/medical/cmo)
|
||||||
"dU" = (/turf/simulated/floor,/area/crew_quarters/locker)
|
"dU" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo)
|
||||||
"dV" = (/turf/simulated/floor{icon_state = "bar"},/area)
|
"dV" = (/turf/simulated/wall,/area/medical/surgery)
|
||||||
"dW" = (/turf/simulated/wall,/area/chapel/office)
|
"dW" = (/turf/simulated/floor{icon_state = "dark"},/area/medical/surgery)
|
||||||
"dX" = (/turf/simulated/floor{icon_state = "carpet"},/area/chapel/office)
|
"dX" = (/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
|
||||||
"dY" = (/turf/space,/area/shuttle/escape/station)
|
"dY" = (/turf/simulated/wall,/area/medical/virology)
|
||||||
|
"dZ" = (/turf/simulated/wall,/area/turret_protected/ai)
|
||||||
|
"ea" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
|
||||||
|
"eb" = (/turf/simulated/floor/plating,/area/medical/surgery)
|
||||||
|
"ec" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
|
||||||
|
"ed" = (/turf/simulated/floor/plating,/area/medical/virology)
|
||||||
|
"ee" = (/turf/simulated/floor/plating,/area/toxins/lab)
|
||||||
|
"ef" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/lab)
|
||||||
|
"eg" = (/turf/simulated/wall,/area/toxins/xenobiology)
|
||||||
|
"eh" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology)
|
||||||
|
"ei" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
|
||||||
|
"ej" = (/turf/space,/area/toxins/test_area)
|
||||||
|
"ek" = (/turf/simulated/wall/r_wall,/area/atmos)
|
||||||
|
"el" = (/turf/simulated/floor/engine,/area/atmos)
|
||||||
|
"em" = (/turf/simulated/wall,/area/toxins/mixing)
|
||||||
|
"en" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing)
|
||||||
|
"eo" = (/turf/simulated/wall,/area/atmos)
|
||||||
|
"ep" = (/turf/simulated/floor/plating,/area/atmos)
|
||||||
|
"eq" = (/turf/simulated/floor,/area/atmos)
|
||||||
|
"er" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos)
|
||||||
|
"es" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/turf/simulated/floor,/area/atmos)
|
||||||
|
"et" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plating,/area/atmos)
|
||||||
|
"eu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor,/area/atmos)
|
||||||
|
"ev" = (/turf/simulated/floor/plating,/area/toxins/mixing)
|
||||||
|
"ew" = (/turf/simulated/floor,/area/toxins/lab)
|
||||||
|
"ex" = (/turf/simulated/wall,/area/toxins/storage)
|
||||||
|
"ey" = (/turf/simulated/floor{icon_state = "white"},/area/toxins/storage)
|
||||||
|
"ez" = (/turf/simulated/wall,/area/toxins/server)
|
||||||
|
"eA" = (/turf/simulated/floor/bluegrid,/area/toxins/server)
|
||||||
|
"eB" = (/turf/simulated/floor{icon_state = "dark"},/area/toxins/storage)
|
||||||
|
"eC" = (/turf/simulated/wall/r_wall,/area/chapel/main)
|
||||||
|
"eD" = (/turf/simulated/floor{icon_state = "carpet"},/area/chapel/main)
|
||||||
|
"eE" = (/turf/simulated/wall,/area/chapel/main)
|
||||||
|
"eF" = (/turf/simulated/floor/plating,/area/chapel/main)
|
||||||
|
"eG" = (/turf/simulated/wall,/area/crew_quarters/locker)
|
||||||
|
"eH" = (/turf/simulated/floor,/area/crew_quarters/locker)
|
||||||
|
"eI" = (/turf/simulated/floor{icon_state = "bar"},/area)
|
||||||
|
"eJ" = (/turf/simulated/wall,/area/chapel/office)
|
||||||
|
"eK" = (/turf/simulated/floor{icon_state = "carpet"},/area/chapel/office)
|
||||||
|
"eL" = (/turf/space,/area/shuttle/escape/station)
|
||||||
|
|
||||||
(1,1,1) = {"
|
(1,1,1) = {"
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
@@ -294,142 +333,142 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
|||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeahajajajajajajajadadadafagagafagagafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeahajajajajajajajadadadafagagafagagafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaeaeaeaeaeahajajajajajajahadadadagagagagagagafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacaeaeaeaeaeahajajajajajajahadadadagagagagagagafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeakakakakakakakakakakakadadadalalalalalalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeakakakakakakakakakakakadadadalalalalalalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeakamamamamamamamamamakadadadalananananananalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeakamamamamamamamamamakadadadalananananananalacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoaoaoaoapaoaoaoaoaeaeakamamamamamamamamamakadadadanananananananalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoaoaoaoapaoaoaoaoaeaeakamamamamamamamamamakadadadanananananananalaeaqaeacaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoapapapapapapapaoaeaeakamamamamamamamamamamadadadalananananananalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoapapapapapapapaoaeaeakamamamamamamamamamamadadadalananananananalaearaeacaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoapapapapapapapaoaeaeamamamamamamamamamamakadadadalalalalanalalalacacacacacacacacacacacacacaqaqaqaqaqaqaqacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaacaeaeaoapapapapapapapaoaeaeamamamamamamamamamamakadadadalalalalanalalalacaracacacaeacacacacacacacasasasasasasasacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoapapapapapapapaoaeaeakamamamamamamamamamakadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaearararararararaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeacacacacaeaeaoapapapapapapapaoaeaeakamamamamamamamamamakadadatauauauauauauauauauavaeaeaeaeaeaeaeaeaeaeaeawawawawawawawaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaoapapapapapapapaoaeaeakakakamamamamamamamakadadadacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacaqaqaqaqaqaqaqacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaxaeacaeaeacaeaeaoapapapapapapapaoaeaeakakakamamamamamamamakadadayacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacasasasasasasasacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaacaeaeaoapapapapapapapaoaeaeaeaeasasasasasasasasasadadadatatatatatatatauauauauauauauauauauauauauauavawawawawawaxacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaraeacaeaeaeaeaeaoapapapapapapapaoaeaeaeaeazazazazazazazazazadadayaAaAaAaAaAaAaAaBaBaBaBaBaBaBaBaBaBaBaBaBaBaCaDaDaDaDaDaEacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeacacacacaaacacaeaeaoapapapapapapapaoaeaeaeaeasayayayayayayayasadadadatazazazazazazauaAaAaAaAaAaAaAaAaAaAaAaAauaBarararararaBacaeaeaCaCaCaCaCaDaDaDaDaCaCaCaCaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeacaracacaeacacaeaeaoapapapapapapapaoaeaeaeaeazaFaFaFaFaFaFaFazadadayaAaGaGaGaGaGaGaBaHaHaHaHaHaHaHaHaHaHaHaHaBaIawawawawawaIacaeaeaJaJaJaJaJaKaKaKaKaJaJaJaJaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeacacacaeaeaeaoapapapapapapapaoaeaeaeaeasayayayayayayayaEadadadatazazazazazazauaAaAaAaAaAaAaAaAaAaAauauauaBarararararaBacaeaeaCaFaFaFaFaFaFaFaFaFaFaFaFaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaearaeacacacaeaeaeaoapapapapapapapaoaeaeaeaeazaFaFaFaFaFaFaFaLadadayaAaGaGaGaGaGaGaBaHaHaHaHaHaHaHaHaHaHaBaBaBaIawawawawawaIacaeaeaJaMaMaMaMaMaMaMaMaMaMaMaMaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaeaeaeaeaeaeaeaeaeaeaeaoapapapapapapapaoaeaeaeaeayayayayayayayayayadadadatazazazazazazaAaAaAaAaAaAaAaAaAaAaAaHaHaHaIarararararaBacaeaeaDaFaFaFaFaFaFaFaFaFaFaFaFaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaNaNaNaeaeaearaeaeaeaeaeaeaeaoapapapapapapapaoaeaeaeaeaFaFaFaFaFaFaFaFaFadadayaAaGaGaGaGaGaGaHaHaHaHaHaHaHaHaHaHaHaOaOaOaPawawawawawaIacaeaeaKaMaMaMaMaMaMaMaMaMaMaMaMaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaJaJaJaJaJaGaKaGaGaeaeaeaeaeaeaeaeaoapapapapapapapaoaeaeaeaeasayayayayayayayaEadadadatazazazazazazauaAaAaAaAaAaAaAaAaAaAaHaHaHaLarararararaBacaeaeaCaFaFaFaFaFaFaFaFaFaFaFaFaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaQaQaQaQaQaNaRaNaNaSauauauauaTaeaeaoapapapapapapapaoaeaeaeaeazaFaFaFaFaFaFaFaLadadayaAaGaGaGaGaGaGaBaHaHaHaHaHaHaHaHaHaHaOaOaOaUawawawawawaIacaeaeaJaMaMaMaMaMaMaMaMaMaMaMaMaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaJaJaJaJaGacacacacacacacacaoaoapapapapaoaoaoacaeaeaeasayayayayayayayasadadadatatatazazatatauaAaAaAaAaAaAaAaAaAaAauauauaBarararararaBacaeaeaCaFaFaFaFaFaFaFaFaFaFaFaFaCacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaQaQaQaQaNacacacacacaracacaoaoapapapapaoaoaoacaeaeaeazaFaFaFaFaFaFaFazadadayaAaAaAaGaGaAaAaBaHaHaHaHaHaHaHaHaHaHaBaBaBaIawawawawawaIacaeaeaJaMaMaMaMaMaMaMaMaMaMaMaMaJacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaJaJaJaJaGadadadadadadadadadadadadadadadacaeacaeaeaeaMaMaMaMaMaMaMaMaMadadadadadadadadadadauaAaAaAaAaAaAaAaAaAaAaHaHaHaLarararararaBacaeaeaCaFaFaFaFaFaFaFaFaFaFaFaFaDaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaQaQaQaQaNataVaVaVaVaWaVaVaVaVaVaVaVaVaXacaeacaeaeaeaYaYaYaYaYaYaYaYaYadadayadadadadadadadaBaHaHaHaHaHaHaHaHaHaHaOaOaOaUawawawawawaIacaeaeaJaMaMaMaMaMaMaMaMaMaMaMaMaKaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaJaJaJaJaJaJaJaJaJaJaJaGadadadadadadadadadadadadadadadaNaNaNaNaeaeaMaOaOaOaOaOaOaOaMadadadadadadadadadadaAaAaAaAaAaAaAaAaAaAaAaHaHaHaParararararaBacaeaeaCaFaFaFaFaFaFaFaFaFaFaFaFaCaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaQaQaQaQaQaQaQaQaQaQaQaNayadadadadadadadadadadadadadayaZaZaZaZaeaeaYbababababababaaYadadayadadadadadadadaHaHaHaHaHaHaHaHaHaHaHaOaOaObbawawawawawaIacaeaeaJaMaMaMaMaMaMaMaMaMaMaMaMaJaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaGaJaJaJaJaJaJaJaJaJaJaJaGadadadadadadadadadadadadadadadaNaQaQaNaeaeaMaOaOaOaOaOaOaOaRadadadadadadadadadadaAaAaAaAaAaAaAaAaAaAaAauauauaBarararararaBacacacaCaCaDaFaDaDaDaDaDaDaFaDaCaCacacacacacacacacacacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaNaQaQaQaQaQaQaQaQaQaQaQaNayadbcbdbdbdbdbdbdbdbdbdbeadayaZbfbfaZaeaeaYbabababababababgadadayadadadadadadadaHaHaHaHaHaHaHaHaHaHaHaBaBaBaIawawawawawaIacacacaJaJaKaMaKaKaKaKaKaKaMaKaJaJacacacacacacacacacacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJaJaJaJaJaJaJaJaJaJaJaGaGaJaGaGadadadaNaNaNaNaNaNaNaNaNadadadaQaQaQaNaeaeaOaOaOaOaOaOaOaOaOadadadadadadadadadadaAaAaAaAaAaAaAaAaAaAaAaAaAauaSaTarararaUaVacadadadadadadadadadadadadadadadadadadadadadadadadadacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQaQaQaQaQaQaQaQaQaQaQaNaNaQaNaNayadbhaZaZaZaZaZaZaZaZaZbhadaybfbfbfaZaeaebababababababababaadadayadadadadadadadaHaHaHaHaHaHaHaHaHaHaHaHaHaBbibjawawawbkblacadadadadadadadadadadadadadadadadadadadadadadadadadacaeacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaGaJaJaJaJaJaJaJaGadadadacadadadaNaQaQaQaQaQaQaQaNadadadaNaQaQaNaeaeaMaOaOaOaOaOaOaOaRadadadadadadadadadadaAaAaAaAaAaAaAaAaAaAaAaAaAauaWaXaYaYaYaXaZacadadadadadadadadadadadadadadadadadadadadadadadadadaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaNaQaQaQaQaQaQaQaNadadadacayadbhaZbfbfbfbfbfbfbfaZbhadayaZbfbfaZaeaeaYbabababababababgadadayadadadadadadadaHaHaHaHaHaHaHaHaHaHaHaHaHaBbmbnbobobobnbpacadadadadadadadadadadadadadadadadadadadadadadadadatauaTacaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaJaJaJaJaJaJaJaGadadadadadadadaNaQaQaQaQaQaQaQaNadadadaNaQaQaNaeaeaMaRaOaOaOaOaOaOaMadadadacacadadadadadauaAaAaAaAaAaAaAaAaAaAaAaAauaababbbbbbbcaaacadadadadadadadadadadadadadadadadadadadadadadadadadacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaQaQaQaQaQaQaQaNadadadadayadbhaZbfbfbfbfbfbfbfaZbhadayaZbfbfaZaeaeaYbgbabababababaaYadadayacacadadadadadaBaHaHaHaHaHaHaHaHaHaHaHaHaBaabqbrbrbrbsaaacadadataVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVbtacaracaebuaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaJadadadadadadadaNaQaQaQaQaQaQaQaNadadadaNaNaNaNaeaeaMaMaMaMaMaMaMaMaMadadadacacadadadadadauauauauauauauauauauauauauauacacacacacacacacadadadbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbebdbdadadadacaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaQadadadadayadbhaZbfbfbfbfbfbfbfaZbhadayaZaZaZaZaeacaYaYaYaYaYaYaYaYaYadadayacacadadadadadaBaBaBaBaBaBaBaBaBaBaBaBaBaBacacacacacacacacadadaybvbvbvbvbvbvbvbvbvbvbvbvbvbvbvbvbwbvbvadadadacaSauauaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaJadadadadadadadaQaQaQaQaNaNaNaNaNadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadbdbfbfbdbfbfbdbfbfbdbfbfbdbgbgbgbgbgbdadadadacaeaeacaabhbhbibibhbibibhbhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaQadadadadayadbhbfbfbfbfaZaZaZaZaZbhadbxaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaWaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVbybvbzbzbvbzbzbvbzbzbvbzbzbvbAbAbAbAbAbvadadadacaeacacacbBbBbCbCbBbCbCbBbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaJadadadadadadadaNaQaQaQaNadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadbdbfbfbdbfbfbdbfbfbdbfbfbdbgbgbgbgbgbdadadadacaeaeacaabhbjbjbjbjbjbjbjbhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaQadadadadayadbhaZbfbfbfaZadadadadbhadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaybvbzbzbvbzbzbvbzbzbvbzbzbvbAbAbAbAbAbvadadadacaeaeacaabBbDbDbDbDbDbDbDbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaGadadadadadadadaNaQaQaQaNadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadbdbfbdbdbfbdbdbfbdbdbfbdbdbgbgbgbgbgbdadadadacaeaeacaabibjbjbjbjbjbjbjbhbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaNadadadadayadbhaZbfbfbfaZadadbcbdbEbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbeadaybvbzbvbvbzbvbvbzbvbvbzbvbvbAbAbAbAbAbvadadadacaeaeacaabCbDbDbDbDbDbDbDbBbFbFbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaJaJaJaJaJaJaJaGadadadacadadadaNaQaQaQaNadadadacacacacacacacacacacacacacacacacacacaeacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacadadadbdblblblblblblblblblblblblblblblblblbdadadadacaeaeacaabibjbjbjbjbjbjbjbhbmbmbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaNadadadacayadbhaZbfbfbfaZadbcbGacacacacacacacacacacacacacacacacacacaeacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacbhadaybvbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbvadadadacaeaeacaabCbDbDbDbDbDbDbDbBbIbIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGaGaGaGaGaGaGaGaGaNaQaNaNadadadaNaNaNaNaNadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadblblblblblblblblblblblblblblblblblblbladadadacaeaeacaabibjbjbjbjbjbjbjbjbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaNaNaNaNaNaZbfaZaZayadbhaZaZaZaZaZadbhacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHadadadacaeaeacaabCbDbDbDbDbDbDbDbDbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaNadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacboacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadblblblblblblblblblblblblblblblblblblbladadadacaeaeacaabibjbjbjbjbjbjbjbhbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbfbfbfbfbfbfbfaZayadbKbdbdbdbdbdbdbLacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbMacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHadadadacaeaeacaabCbDbDbDbDbDbDbDbBbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaQadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacboacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbdblblblblblblblblblblblblblblblblblbdadadadacaeaeacaabhbjbjbjbjbjbjbjbhbmbmbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbfbfbfbfbfbfbfbfayadadadadadadadadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbMacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybvbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbHbvadadadacaeaeacaabBbDbDbDbDbDbDbDbBbIbIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQaQaQaQaQaNadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbpbpbqbpbpbdbrbdbdbdbrbdbdbdbdbsbdbdbdadadadacaeaeacaabhbhbhbhbhbhbhbhbhbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbfbfbfbfbfbfbfaZbxbNaVaVaVaVaVaXadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybObObPbObObvbQbvbvbvbQbvbvbvbvbRbvbvbvadadadacaeacacacbBbBbBbBbBbBbBbBbBbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaNaNaNaNaNacacacacacacacadadadacaaaaaaaabtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaacadadadbpbqbqbqbpbrbrbrbdbrbrbrbdbsbsbsbdbsbdadadadacaeaeacaabkbubububkbubububkbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaZaZaZaZacaracacacacacayadbhacaaaaaaaabSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSaaaaaaaaacbhadaybObPbPbPbObQbQbQbvbQbQbQbvbRbRbRbvbRbvadadadacaeaeaeaebFbTbTbTbFbTbTbTbFbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbpbqbqbqbpbrbrbrbdbrbrbrbdbsbsbsbsbsbdadadadacaeaeacaabkbubububkbubububkbmbmbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaearacaeaeaeacayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybObPbPbPbObQbQbQbvbQbQbQbvbRbRbRbRbRbvadadadacaeacaeaebFbTbTbTbFbTbTbTbFbIbIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbvbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbpbpbpbpbpbdbdbdbdbdbdbdbdbdbebdbdbdbdadadadacaeaeacaabkbkbubkbkbkbubkbkbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbVbWbWbXbYbYbYbYayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybObObObObObvbvbvbvbvbvbvbvbvbwbvbvbvbvadadadacaeacacacbFbFbTbFbFbFbTbFbFbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadadacaeaeacaabnbmbmbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUbUbXbYbYbYbXayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadbZauauauauauauauaTaeaeaeaeaeaeaeaeaeaeaeadadadacaeaeacaabJbIbIbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAbAbAbAbAbAbAbAbAbAbAaaaaaaaaaaaabBbBbBbBbBbBbBbBaaaaaaaaaaaaaaaaaaaaacadadadacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacadadadaeaeaeacaabnbmbmbmbmbmbmbmbmbmbmbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacbcbcbbYbYbYbYbXayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccaaaaaaaaaaaacdcdcdcdcdcdcdcdaaaaaaaaaaaaaaaaaaaaacbhadayacaeaeaeaeaeaearaeaeaeaeaeaeaeaeaeaeacadadadaeaeaeacaabJbIbIbIbIbIbIbIbIbIbIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzbCbCbCbCbCbCbCbzbCbCbCbCbCbzbxbxbxbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaabAbAbAbAbAbAbAbDbDbDbDbDbDbDbDbDbAbAbAbAbAbAbAbAbEbEbEbEbEbEbBaaaaaaaaaaaaaaaaaaaaacadadadbFbFbFbFbGbFbFbFbHbHbHbHbHbHbHbIbHbHbHadadadacaeaeacaabkbkbubkbkbkbubkbkbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacecececececececacecececececacbcbcbbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaacccccccccccccccfcfcfcfcfcfcfcfcfcccccccccccccccccgcgcgcgcgcgcdaaaaaaaaaaaaaaaaaaaaacbhadaychchchcichchchcjckckckckckckckclckckckadadadacaeaeacaabFbFbTbFbFbFbTbFbFbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzbCbCbCbCbCbCbCbzbCbCbCbCbCbCbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbAbDbDbDbDbAbEbEbEbEbEbEbBaaaaaaaaaaaaaaaaaaaaacadadadbFbJbJbJbJbJbJbJbHbKbKbKbKbKbKbKbKbKbHadadadacaeaeacaabkbubububkbubububkbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacecececececececacececececececbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcccfcfcfcfcccgcgcgcgcgcgcdaaaaaaaaaaaaaaaaaaaaacbhadaychcncncncnchcicjckcococococococococockadadadacaeaeacaabFbTbTbTbFbTbTbTbFbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbvbvbvbvbvbzbCbCbCbCbCbCbCbCbCbCbCbCbCbCbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbAbEbEbEbEbEbEbBaaaaaaaaaaaaaaaaaaaaacadadadbFbJbJbJbJbJbJbJbHbKbKbKbKbKbKbKbKbKbHadadadacaeaeacaabkbubububkbubububkbmbmbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUbUbUbUbUbUcacececececececececececececececbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcccgcgcgcgcgcgcdaaaaaaaaaaaaaaaaaaaaacbhadaychcncncncnchcpcickcococococococococockadadadacaeaeacaabFbTbTbTbFbTbTbTbFbIbIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbxbxbxbvbxbxbxbzbCbCbCbCbCbCbCbzbCbCbCbCbCbCbxbxbxbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaabAbAbLbAbAbDbDbDbDbDbAbAbAbDbDbDbDbDbAbDbDbDbDbAbEbEbEbEbEbEbBaaaaaaaaaaaaaaaaaaaaacadadadbJbJbJbJbJbJbJbJbHbKbKbKbKbKbKbKbKbKbKadadadacaeaeacaabkbkbkbkbkbkbkbkbkbmbmbkbkbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcbcbcbbUcbcbcbcacecececececececacececececececbcbcbbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaacccccqcccccfcfcfcfcfcccccccfcfcfcfcfcccfcfcfcfcccgcgcgcgcgcgcdaaaaaaaaaaaaaaaaaaaaacbhadaycncncncncnchcicickcocococococococococoadadadacaeaeacaabFbFbFbFbFbFbFbFbFbIbIbFbFbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbxbxbxbvbxbxbxbzbCbCbCbCbCbCbCbzbCbCbCbCbCbzbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbLbLbLbAbAbAbLbLbLbAbMbAbLbLbLbAbAbAbDbDbDbDbAbBbBbEbEbBbBbBaaaaaaaaaaaaaaaaaaaaacadadadbFbJbJbJbJbHbHbHbHbHbHbHbKbKbKbKbKbKbHadadadacaeaeacaaaaaaaaaaaaaabkbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcbcbcbbUcbcbcbcacecececececececacecececececacbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccqcqcqcccccccqcqcqcccrcccqcqcqcccccccfcfcfcfcccdcdcgcgcdcdcdaaaaaaaaaaaaaaaaaaaaacbhadaychcncncncnckckckckckckckcocococococockadadadacaeaeacaaaaaaaaaaaaaabFbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbvbvbvbxbvbvbvbxbvbvbvbzbzbzbzbzbzbzbzbCbCbCbzbzbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbLbLbLbAaaaaaaaaaaaaaaaaaaaaaaaaaabAbDbDbDbDbDbDbDbDbDbDbDbAbAbAaaaaaaaaaaaaaaaaacadadadbFbJbJbJbJbHbNbNbNbNbNbHbKbKbKbKbKbKbHadadadacacaeacacacacacacacacbkbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUbUbUbUcbbUbUbUcbbUbUbUcacacacacacacacacecececacacbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccqcqcqccaaaaaaaaaaaaaaaaaaaaaaaaaacccfcfcfcfcfcfcfcfcfcfcfccccccaaaaaaaaaaaaaaaaacbhadaychcncncncnckcscscscscsckcocococococockadadadacacaeacacacacacacacacbFbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbxbxbxbvbxbxbxbxbxbxbxbxbxbvbxbxbxbxbvbxbxbxbxbxbxbxbxbxbxbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaabAbAbLbAbAaaaaaaaaaaaaaaaaaaaaaaaaaabAbAbDbDbDbDbDbDbDbDbDbDbDbDbAaaaaaaaaaaaaacacacadadadbFbJbJbJbJbHbNbNbNbNbNbNbKbKbKbKbKbKbHadadadadadadadadadadadadadadbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUcbcbcbbUcbcbcbcbcbcbcbcbcbbUcbcbcbcbbUcbcbcbcbcbcbcbcbcbcbbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaacccccqccccaaaaaaaaaaaaaaaaaaaaaaaaaacccccfcfcfcfcfcfcfcfcfcfcfcfccaaaaaaaaaaaaacacacbhadaychcncncncnckcscscscscscscocococococockadadadadadadadadadadadadadadbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbMbMbMbMaaaabObPaabPbObPbQbPbOaaaabMbAbDbDbDbDbDbDbDbDbDbDbDbDbAaaaaaaaaaaacacaeaeadadadbFbFbJbFbFbHbNbNbNbNbNbHbKbKbKbKbKbKbHadadadadadadadadadadadadadadbmbmbmbmbmbmbmbnbnbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccrcrcrcraaaactcuaacuctcucvcuctaaaacrcccfcfcfcfcfcfcfcfcfcfcfcfccaaaaaaaaaaacacaeaebhadaychchcnchchckcscscscscsckcocococococockadadadadadadadadadadadadadadbIbIbIbIbIbIbIbJbJbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbybybybybwadadadacacacaaaaaaaaaaaaaabAbMbMbMbMaaaabPbPaaaaaabRaabPbQaaaabAbAbAbAbDbAbAbAbDbDbDbDbDbDbAaaaaaabtaaboaeaeacadadadbSbSbSbSbSbHbHbHbHbHbHbHbHbHbHbKbHbHbHadadadacacbTbTbUbTbTbTbTbTbTbkbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcmcmcmcmbXayadbhacacacaaaaaaaaaaaaaacccrcrcrcraaaacucuaaaaaacwaacucvaaaacccccccccfcccccccfcfcfcfcfcfccaaaaaabSaabMaeaeacbhadaycxcxcxcxcxckckckckckckckckckckcockckckadadadacaccycyczcycycycycycybFbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbxbxbxbvbxbxbxbxbxbxbxbxbxbvbxbxbxbxbvbxbxbxbxbxbxbxbxbxbxbwbwbwbwbwadadadaeaeacaaaaaaaaaaaabAbAbMbMbMbMaaaabPbQbPbPbPbPbPaaaaaaaabLbLbDbDbDbDbDbAbAbDbDbDbDbDbAacacacacacacacacacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadadadbTbUbUbUbUbUbUbUbUbkbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUcbcbcbbUcbcbcbcbcbcbcbcbcbbUcbcbcbcbbUcbcbcbcbcbcbcbcbcbcbbXbXbXbXbXayadbhaeaeacaaaaaaaaaaaacccccrcrcrcraaaacucvcucucucucuaaaaaaaacqcqcfcfcfcfcfcccccfcfcfcfcfccacacacacacacacacacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadadadcyczczczczczczczczbFbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbvbvbvbvbvbvbxbxbvbvbvbvbvbvbvbvbvbxbxbxbxbxbxbxbxbxbxbxadadadadadadadacaeacacaaaaaaaaaabAbMbMbMbAbAaaaaaaaabPbMbMbMbPbVbQaaaabLbLbDbDbDbDbDbDbAbDbDbDbDbDbAadadadadadadadadacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadacadbUbUbUbUbUbUbUbUbUbkbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUbUbUbUbUbUbUcbcbbUbUbUbUbUbUbUbUbUcbcbcbcbcbcbcbcbcbcbcbadadadadayadbhacaeacacaaaaaaaaaacccrcrcrccccaaaaaaaacucrcrcrcucAcvaaaacqcqcfcfcfcfcfcfcccfcfcfcfcfccadadadadadadadadacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadacadczczczczczczczczczbFbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbxbxbvaaaabvbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxadadadadadadadacaeboboaabtaaaaaabAbMbMbMbAbMaaaabObQbPbWbXbMbPaabOaaaabLbLbDbDbDbDbDbDbDbDbDbDbDbDbDadadadadadadadadadadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadacadbTbUbUbUbUbUbUbUbUbkbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcbcbbUaaaabUcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbadadadadayadbhacaebMbMaabSaaaaaacccrcrcrcccraaaactcvcucBcCcrcuaactaaaacqcqcfcfcfcfcfcfcfcfcfcfcfcfcfadadadadadadadadadbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadacadcyczczczczczczczczbFbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbxbxbvaaaabvbxbxbxbxbvbxbxbxbxbxbxbxbxbxbxbxadadadadadadadacaeacacaaaaaaaaaabAbMbMbMbAbAaaaabPbYbPbMbMbMbPaaaaaaaabLbLbDbDbDbDbDbDbAbDbDbDbDbDbAadadadadadadadadacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadacadbTbUbUbUbUbUbUbUbUbmbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcbcbbUaaaabUcbcbcbcbbUcbcbcbcbcbcbcbcbcbcbcbadadadadayadbhacaeacacaaaaaaaaaacccrcrcrccccaaaacucDcucrcrcrcuaaaaaaaacqcqcfcfcfcfcfcfcccfcfcfcfcfccadadadadadadadadacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadacadcyczczczczczczczczbIbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbZbZbvbvaabvbvbvbvbvbvbxbxbxbxbxbxbxbxbxbxbwbwbwbwbwadadadaeaeacaaaaaaaaaaaabAbAbMbMbMbMaaaaaaaabPbPbPbPbPaaaaaaaabLbLbDbDbDbDbDbAbAbDbDbDbDbDbAacacacacacacacacacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadadadbTbUbUbUbUbUbUbUbUbkbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUcEcEbUbUaabUbUbUbUbUbUcbcbcbcbcbcbcbcbcbcbbXbXbXbXbXayadbhaeaeacaaaaaaaaaaaacccccrcrcrcraaaaaaaacucucucucuaaaaaaaacqcqcfcfcfcfcfcccccfcfcfcfcfccacacacacacacacacacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadadadcyczczczczczczczczbFbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbZbZbZbZbvaabvbZbZbZbZbvbxbxbxbxbxbxbxbxbxbxbybybybybwadadadacacacaaaaaaaaaaaaaabAbMbMbMbMaaaabPaaaaaaaaaaaabPbQaaaabAbAbAbAbDbAbAbAbDbDbDbDbDbDbAaaaaaabtaaboaeaeacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadacacbTbTbUbTbTbTbTbTbTbkbmbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcEcEcEcEbUaabUcEcEcEcEbUcbcbcbcbcbcbcbcbcbcbcmcmcmcmbXayadbhacacacaaaaaaaaaaaaaacccrcrcrcraaaacuaaaaaaaaaaaacucvaaaacccccccccfcccccccfcfcfcfcfcfccaaaaaabSaabMaeaeacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadacaccycyczcycycycycycybFbIbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbZbZbZbZcaaacabZbZbZbZbZbxbxbxbxbxbxbxbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbMbMbMbMaaaabObPbQbPbObPbQbPbOaaaabMbAbDbDbDbDbDbDbDbDbDbDbDbDbAaaaaaaaaaaacacaeaeadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadadadadadadadadadadadadbmbmbmbmbmbmbmbnbnbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcEcEcEcEbWaabWcEcEcEcEcEcbcbcbcbcbcbcbcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccrcrcrcraaaactcucvcuctcucvcuctaaaacrcccfcfcfcfcfcfcfcfcfcfcfcfccaaaaaaaaaaacacaeaebhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadadadadadadadadadadadadbIbIbIbIbIbIbIbJbJbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbZbZbZbZbvaabvbZbZbZbZbvbxbxbxbxbxbxbxbxbxbxbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaabAbAbLbAbAaaaaaaaaaaaaaaaaaaaaaaaaaabAbAbDbDbDbDbDbDbDbDbDbDbDbDbAaaaaaaaaaaaaacacacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadadadadadadadadadadadadbmbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUcEcEcEcEbUaabUcEcEcEcEbUcbcbcbcbcbcbcbcbcbcbbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaacccccqccccaaaaaaaaaaaaaaaaaaaaaaaaaacccccfcfcfcfcfcfcfcfcfcfcfcfccaaaaaaaaaaaaacacacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadadadadadadadadadadadadbIbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbvbvbvaabvbvbvbvbvbvcbcbcccccccbcbbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbLbLbLbAaaaaaaaaaaaaaaaaaaaaaaaaaabAbDbDbDbDbDbDbDbDbDbDbDbAbAbAaaaaaaaaaaaaaaaaacadadadbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSadadadacacacacacacacacacacacbkbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUbUbUbUbUbUaabUbUbUbUbUbUcFcFcGcGcGcFcFcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccqcqcqccaaaaaaaaaaaaaaaaaaaaaaaaaacccfcfcfcfcfcfcfcfcfcfcfccccccaaaaaaaaaaaaaaaaacbhadaycxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxcxadadadacacacacacacacacacacacbFbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdcecececececbcccccccccccbbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbLbLbLbAbAbAbLbLbLbAbMbAbLbLbLbAbAbAbDbDbDbDbAbLbLbLbAbAbAbAaaaaaaaaaaaaaaaaaaaaacadadadbSbSbSbSbScfcfcfcfcfcfcfcfcfbSbSbSbSbSadadadacaaaaaaaaaaaaaaaaaaaabkbmbmbmbmbmbmbnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcIcIcIcIcIcFcGcGcGcGcGcFcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccqcqcqcccccccqcqcqcccrcccqcqcqcccccccfcfcfcfcccqcqcqccccccccaaaaaaaaaaaaaaaaaaaaacbhadaycxcxcxcxcxcJcJcJcJcJcJcJcJcJcxcxcxcxcxadadadacaaaaaaaaaaaaaaaaaaaabFbIbIbIbIbIbIbJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdcecececececbccccccccccccbxbxbxbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaabAbAbLbAbAbDbDbDbDbDbAbAbAbDbDbDbDbDbAbDbDbDbDbAbLbLbLbAaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbSbSbSbSbScfcfcfcfcfcfcfcfcfbSbSbSbSbSadadadacaaaaaaaaaaaaaaaaaaaacgcgcgchcgcgcgcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcIcIcIcIcIcFcGcGcGcGcGcGcbcbcbbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaacccccqcccccfcfcfcfcfcccccccfcfcfcfcfcccfcfcfcfcccqcqcqccaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaycxcxcxcxcxcJcJcJcJcJcJcJcJcJcxcxcxcxcxadadadacaaaaaaaaaaaaaaaaaaaacKcKcKcLcKcKcKcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdcecececececiccccccccccccbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbAcjckclbAaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbSbSbSbSbScfcfcfcfcfcfcfcfcfbSbSbSbSbSadadadacaaaaaaaaaaaaaaaaaaaacgchchchchchchcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcIcIcIcIcIcMcGcGcGcGcGcGcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcccNcOcPccaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaycxcxcxcxcxcJcJcJcJcJcJcJcJcJcxcxcxcxcxadadadacaaaaaaaaaaaaaaaaaaaacKcLcLcLcLcLcLcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdcecececececbccccccccccccbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaabAbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbAbDbDbDbDbAcmcncmbAaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbSbSbSbSbScococococococococobSbSbSbSbSadadadacaaaaaaaaaaaaaaaaaaaacgchchchchchchcpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcIcIcIcIcIcFcGcGcGcGcGcGcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaacccfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcccfcfcfcfcccQcRcQccaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaycxcxcxcxcxcScScScScScScScScScxcxcxcxcxadadadacaaaaaaaaaaaaaaaaaaaacKcLcLcLcLcLcLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdcecececececbcccccccccccbbxbxbxbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaabAbAbAbAbAbAbAbDbDbDbDbDbDbDbDbDbAbAbAbAbAbAbAbAcmcqcmbAaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaacgchchchchchchcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcIcIcIcIcIcFcGcGcGcGcGcFcbcbcbbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaacccccccccccccccfcfcfcfcfcfcfcfcfcccccccccccccccccQcUcQccaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadayadadadadadadadadadadadadadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaacKcLcLcLcLcLcLcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdcdcdcdcdcdcbcbcccccccbcbbxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAbAbAbAbAbAbAbAbAbAbAaaaaaaaaaaaaaacrcsctaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadcucucucucucucucucucucucgcgcgcgcgcgcgcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHcHcHcHcHcHcFcFcGcGcGcFcFcbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccaaaaaaaaaaaaaacVcWcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadayadadadadadadadadadadadadadadadadadadadadadadcYcYcYcYcYcYcYcYcYcYcYcKcKcKcKcKcKcKcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbxbxbybybybybwadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadcucvcvcvcvcvcvcvcvcvcvcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccbcbcbcmcmcmcmbXayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadayadadadadadadadadadadadadadadadadadadadadadadcYcZcZcZcZcZcZcZcZcZcZcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbwbwbwbwbwadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbpbpbpbpbpcwcwcwcwcwcwcwcwcwcwcwcwcwcwadadadcucvcvcvcvcvcvcvcvcvcvcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbUbUbUbXbXbXbXbXayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybObObObObOdadadadadadadadadadadadadadaadadadcYcZcZcZcZcZcZcZcZcZcZcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaNadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbpbqbqbqbpcxcxcxcwcxcxcxcwcycycycycycwadadadcucvcvcvcvcvcvcvcvcvcvcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbfbfaZayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybObPbPbPbOdbdbdbdadbdbdbdadcdcdcdcdcdaadadadcYcZcZcZcZcZcZcZcZcZcZcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaQadadadacaaaaaaaabtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtaaaaaaaaacadadadbpbqbqbqbpcxcxcxcwcxcxcxcwcycycycwcycwadadadcuczczczczczczczczczczcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbfbfbfayadbhacaaaaaaaabSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSaaaaaaaaacbhadaybObPbPbPbOdbdbdbdadbdbdbdadcdcdcdadcdaadadadcYddddddddddddddddddddcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaQaQaNadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadbpbpbqbpbpcwcxcwcwcwcxcwcwcwcwcycwcwcwadadadczczczczczczczczczczczcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbfbfaZayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaybObObPbObOdadbdadadadbdadadadadcdadadaadadadddddddddddddddddddddddcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaNaQaQaNadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacboacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadcwcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcwadadadczczczczczczczczczczczcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaZbfbfaZayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbMacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaydadedededededededededededededededededaadadadddddddddddddddddddddddcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaNaNaNaNadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacboacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAadadadcuczczczczczczczczczczcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaZaZaZaZayadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbMacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaydededededededededededededededededededeadadadcYddddddddddddddddddddcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAadadadcucvcvcvcvcvcvcvcvcvcvcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaedfauauauaubyadbhacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbhadaydededededededededededededededededededeadadadcYcZcZcZcZcZcZcZcZcZcZcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacacacacadadadacacacacacacacacacacacacacacacacacacacaeacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacadadadcwcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcwadadadcucvcvcvcvcvcvcvcvcvcvcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaearacacacacayadbhacacacacacacacacacacacacacacacacacacacaeacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacbhadaydadedededededededededededededededededaadadadcYcZcZcZcZcZcZcZcZcZcZcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaeaeacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcwcBcwcwcBcwcwcBcwcwcBcwcwcCcCcCcCcCcwadadadcucvcvcvcvcvcvcvcvcvcvcvcvcvcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaearacaeaeacayadbKbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbddgbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbGadaydadhdadadhdadadhdadadhdadadidididididaadadadcYcZcZcZcZcZcZcZcZcZcZcZcZcZcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcwcBcBcwcBcBcwcBcBcwcBcBcwcCcCcCcCcCcwadadadcucucucucucucucucucucucucucucuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaearaeaeaeacayadadadadadadadadadadadadadadadadadadadadadadbhadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaydadhdhdadhdhdadhdhdadhdhdadidididididaadadadcYcYcYcYcYcYcYcYcYcYcYcYcYcYcYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaeaeacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcwcBcBcwcBcBcwcBcBcwcBcBcwcCcCcCcCcCcwadadadacaaaaaaaacDcEcEcEcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaearacaeaeacbxaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVdjaVbNaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVaVbtdadhdhdadhdhdadhdhdadhdhdadidididididaadadadacaaaaaaaadkdldldldkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaeaecFcFcFcFcFcFadadcFcFcFcFcFcFcFcFcGcHcHcGcFcFcFcFadadadcIcIcIadadadcIcIcIcJcJcJcJcJcKcKcKcKcKcKcLcLcLcMcLcLacacaeacacaccwcwcwcwcwcwcwcwcwcwcwcwcwcwcwcNcwcwcwcDcOcDcDcDcDcDcDcDcEcEcEcDcDcDcDcDcDcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaearacaeaedmdmdmdmdmdmadaddmdmdmdmdmdmdmdmdndododndmdmdmdmbhadaydpdpdpadadaddpdpdpdqdqdqdqdqdrdrdrdrdrdrdsdsdsdtdsdsacacaeacacacdadadadadadadadadadadadadadadadudadadadkdvdkdkdkdkdkdkdkdldldldkdkdkdkdkdkdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcFcFcFcPcPcPcPcFcPcPcFcQcQcQcQcHcHcHcHcHcHcHcHcHcFadadadadcIcRcIcRcRcRcIcRcIcJcJcJcJcJcKcScScScScScLcMcMcMcMcMacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecDcOcOcOcOcOcOcOcOcDcEcEcEcDcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeardmdmdmdmdwdwdwdwdmdwdwdmdxdxdxdxdodododododododododmadbhadaydpdydpdydydydpdydpdqdqdqdqdqdrdzdzdzdzdzdsdtdtdtdtdtacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaedkdvdvdvdvdvdvdvdvdkdldldldkdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcPcPcPcPcPcPcPcPcPcPcFcQcQcQcQcHcHcHcHcHcHcHcHcHcGadadadadcIcRcRcRcRcRcRcRcRcJcJcJcJcJcScScScScScScLcMcMcMcMcMacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecTcOcOcOcOcOcOcOcOcEcEcEcEcDcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeardmdwdwdwdwdwdwdwdwdwdwdmdxdxdxdxdodododododododododnadbhadaydpdydydydydydydydydqdqdqdqdqdzdzdzdzdzdzdsdtdtdtdtdtacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaedAdvdvdvdvdvdvdvdvdldldldldkdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcPcPcPcPcPcPcPcPcPcPcFcQcQcQcQcFcHcHcHcHcHcHcHcHcHadadadadcIcRcRcRcRcRcRcRcIcJcJcJcJcJcKcScScScScScLcMcMcMcMcMcUcUcUcUcUcUcUcUcUcUcUcUcUcVcVcVcVcVcVcVcVcVcVcVcDcOcOcOcOcOcOcOcOcDcDcDcDcDcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeardmdwdwdwdwdwdwdwdwdwdwdmdxdxdxdxdmdododododododododoadbhadaydpdydydydydydydydpdqdqdqdqdqdrdzdzdzdzdzdsdtdtdtdtdtdBdBdBdBdBdBdBdBdBdBdBdBdBdCdCdCdCdCdCdCdCdCdCdCdkdvdvdvdvdvdvdvdvdkdkdkdkdkdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcPcPcPcPcPcPcPcPcPcPcFcQcQcQcQcFcHcHcHcHcHcHcHcHcHadadadadcIcRcRcRcRcRcRcRcIcWcWcXcJcJcKcKcYcScYcKcLcMcMcMcMcMcUcZcZcZcZcZcZcZcZcZcZcZcUdadadacVdadadacVdadadacDcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeardmdwdwdwdwdwdwdwdwdwdwdmdxdxdxdxdmdododododododododoadbhadaydpdydydydydydydydpdDdDdEdqdqdrdrdFdzdFdrdsdtdtdtdtdtdBdGdGdGdGdGdGdGdGdGdGdGdBdHdHdHdCdHdHdHdCdHdHdHdkdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcPcPcPcPcPcPcPcPcPcPcQcQcQcQcQcFcHcHcHcHcHcHcHcHcGadadadadcIcRcRcRcRcRcRcRcIcJcJcXcJcJcJcJcJcJcJcJcLcMcMcMcMcMcZcZcZcZcZcZcZcZcZcZcZcZcUdadadacVdadadacVdadadacDcOcOcOcOcOcOcOcOcOcOcOcOcDcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeardmdwdwdwdwdwdwdwdwdwdwdxdxdxdxdxdmdododododododododnadbhadaydpdydydydydydydydpdqdqdEdqdqdqdqdqdqdqdqdsdtdtdtdtdtdGdGdGdGdGdGdGdGdGdGdGdGdBdHdHdHdCdHdHdHdCdHdHdHdkdvdvdvdvdvdvdvdvdvdvdvdvdkdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcPcPcPcPcPcPcPcPcPcPcQcQcQcQcQcFcHcHcHcHcHcHcHcHcFadadadadcIcRcRcRcRcRcRcRcIcJcJcJcJcJcJcJcJcJcJcJdbcMcMcMcMcMcUcZcZcZcZcZcZcZcUcUcUcUcUcVdacVcVcVdacVcVcVdacVcDcOcOcOcOcOcOcOcOcOcOcOcOcDcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaeardmdwdwdwdwdwdwdwdwdwdwdxdxdxdxdxdmdododododododododmadbhadaydpdydydydydydydydpdqdqdqdqdqdqdqdqdqdqdqdIdtdtdtdtdtdBdGdGdGdGdGdGdGdBdBdBdBdBdCdHdCdCdCdHdCdCdCdHdCdkdvdvdvdvdvdvdvdvdvdvdvdvdkdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaecFcFcFcFcFcFcFcFcFcFcFcFcFcGcGcFcFcFcFcFcFcGcFcFcFcFcFadadadcIcIcIcIcIcIcIcIcIcXcXcXcJcJcJcJcJcJcJcJcLcMcMcMcMcMcUcZcZcZcZcZcZcZcUcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcOcOcOcOcOcOcOcOcOcOcOcOcOcDcDcDcDcDcDcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaeardmdmdmdmdmdmdmdmdmdmdmdmdmdndndmdmdmdmdmdmdndmdmdmdmdmbhadaydpdpdpdpdpdpdpdpdpdEdEdEdqdqdqdqdqdqdqdqdsdtdtdtdtdtdBdGdGdGdGdGdGdGdBdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdvdvdvdvdvdvdvdvdvdvdvdvdvdkdkdkdkdkdkdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadadacaeaeacaeaeaecXcJcJcJcXcJcJcJcJcJcJcJcJcLcMcMcMcMcMcUcZcZcZcZcZcZcZcUcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcOcOcOcOcOcOcOcOcOcOcOcOcOcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaSauauaTaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaebhadayacaeaeacaedJaedEdqdqdqdEdqdqdqdqdqdqdqdqdsdtdtdtdtdtdBdGdGdGdGdGdGdGdBdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdvdvdvdvdvdvdvdvdvdvdvdvdvdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacadadadaeaeaeaeaeaeaecXcJcJcJcJcJcJcJcJcJcJcJcJcLcLcLcLcLcLcUcUcUdccZdccUcUcUcJcJdddddededdddcVdacVcVcVdacVcDcDcDcTcDcDcDcDcDcDcDcDcDcDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaeaeaeaearaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacbhadbZauauauauauaeaedEdqdqdqdqdqdqdqdqdqdqdqdqdsdsdsdsdsdsdBdBdBdKdGdKdBdBdBdqdqdLdLdMdMdLdLdCdHdCdCdCdHdCdkdkdkdAdkdkdkdkdkdkdkdkdkdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaeaedfdfdfdfdfdfdfdfdfdfdfdfdgdgdgdgdgdgdgdgdgdgdgdgadadadacaeaeacaeaeaecXcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJdddededededddadadacVdadadaacaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaeardNdNdNdNdNdNdNdNdNdNdNdNdOdOdOdOdOdOdOdOdOdOdOdObhadayacaeaeacaeaeaedEdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdLdMdMdMdMdLdHdHdHdCdHdHdHacaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedfdhdhdhdhdhdhdhdhdhdhdhdgdididididididididididgadadadacaeaeacacacaccXcJcJcJcXcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJcJdddededededddadadacVdadadaacaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeacaeardNdPdPdPdPdPdPdPdPdPdPdPdOdQdQdQdQdQdQdQdQdQdQdObhadayacaeaeacacacacdEdqdqdqdEdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdqdLdMdMdMdMdLdHdHdHdCdHdHdHacaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedfdhdhdhdhdhdhdhdhdhdhdhdgdididididididididididgadadadacaeaeacaeaeaecXcJcJcJcXcXcJcXdjdkdkdkdldkdkdkdkdjdmdndmdmdmdmdmdmdmdmdodmdddededededddpdpdpdpdpdpdpdpaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaedRaeauauauavdNdPdPdPdPdPdPdPdPdPdPdPdOdQdQdQdQdQdQdQdQdQdQdObhadayacaeaeacaeaeaedEdqdqdqdEdEdqdEdSdTdTdTdUdTdTdTdTdSdVdWdVdVdVdVdVdVdVdVdXdVdLdMdMdMdMdLdYdYdYdYdYdYdYdYaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaeaedfdfdfdfdfdfdfdfdfdfdhdhdqdqdrdqdqdididididididiadadadacaeaeaeaeaeaecXcJcJcJcJcJcJcJdjdldldldldldldldldjdndndsdodododododmdodododddddddddddddtdtdtdudtdtdtdpaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaeaedNdNdNdNdNdNdNdNdNdNdPdPdZdZeadZdZdQdQdQdQdQdQdQbhadayacaeaeaeaeaeaedEdqdqdqdqdqdqdqdSdUdUdUdUdUdUdUdUdSdWdWebdXdXdXdXdXdVdXdXdXdLdLdLdLdLdLecececedecececdYaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaedvdfdwdwdwdwdwdwdwdfdhdhdqdqdrdqdqdididididididiadadadacaeaeacaeaeaecXcJcJcJcJcJcJcJdjdldldldldldldldldjdndndsdodododododododododpdtdtdtdtdudtdtdtdudtdtdtdpaeaeacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeeedNefefefefefefefdNdPdPdZdZeadZdZdQdQdQdQdQdQdQbhadayacaeaeacaeaeaedEdqdqdqdqdqdqdqdSdUdUdUdUdUdUdUdUdSdWdWebdXdXdXdXdXdXdXdXdXdYececececedecececedecececdYaeaeacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaedvdfdwdwdwdwdwdwdwdfdhdhdqdqdrdqdqdididididididgadadadacaeaeacacacaccXcJcJcJcJcJcJcJdjdldldldldldldldldjdndndsdodododododmdodododpdtdtdtdtdudtdtdtdudtdtdtdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeeedNefefefefefefefdNdPdPdZdZeadZdZdQdQdQdQdQdQdObhadayacaeaeacacacacdEdqdqdqdqdqdqdqdSdUdUdUdUdUdUdUdUdSdWdWebdXdXdXdXdXdVdXdXdXdYececececedecececedecececdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdxdxdxdxdxdxdydydydydwdwdwdfdhdhdqdqdqdqdqdididididididgadadadacaeaeaeaeaeaecXcJcJcJcJcJcJcJdjdldldldldldldldldjdndndsdodododododmdpdtdpdpdtdtdtdtdududtdudududtdudpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegegegegegegegehehehehefefefdNdPdPdZdZdZdZdZdQdQdQdQdQdQdObhadayacaeaeaeaeaeaedEdqdqdqdqdqdqdqdSdUdUdUdUdUdUdUdUdSdWdWebdXdXdXdXdXdVdYecdYdYececececededecedededeceddYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdxdydydydydwdwdwdfdhdhdqdqdqdqdqdididgdgdgdgdgadadadacaeaeaeaeaeaecXcXcXcXcXcXcXcXdjdjdjdjdjdjdjdjdjdjdndndsdodododododmdtdtdtdpdtdtdtdtdtdtdtdtdtdtdtdtdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieiegehehehehefefefdNdPdPdZdZdZdZdZdQdQdOdOdOdOdObhadayacaeaeaeaeaeaedEdEdEdEdEdEdEdEdSdSdSdSdSdSdSdSdSdSdWdWebdXdXdXdXdXdVecececdYececececececececececececdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdxdzdzdzdzdhdhdhdfdhdhdhdhdhdhdhdhdhdhdhdhdhdfadadadaNaNaNaNaNaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacdmdmdmdmdmdmdmdmdmdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdtdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieiegeieieieidPdPdPdNdPdPdPdPdPdPdPdPdPdPdPdPdPdNbhadayaZaZaZaZaZaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacdVdVdVdVdVdVdVdVdVececececececececececececececececdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdzdzdzdzdzdzdzdzdzdhdhdhdhdhdhdhdhdhdhdhdhdhdfadadadaNaQaQaQaNaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaedpdtdtdtdpdtdtdtdtdtdudududtdudududpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieieieieieieieieieieidPdPdPdPdPdPdPdPdPdPdPdPdPdNbhadayaZbfbfbfaZaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaedYecececdYecececececedededecedededdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdzdzdzdzdzdzdzdzdzdhdhdhdhdhdhdhdhdhdhdhdfdfdfadadadaQaQaQaQaNaeaedBdBdBdBdBdBdBdBdBdBdBdBdBacacaeaeaeaeaeaeaeaeaeaeaedpdpdpdpdpdtdtdtdtdtdudtdtdtdtdtdtdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieieieieieieieieieieidPdPdPdPdPdPdPdPdPdPdPdNdNdNbhadaybfbfbfbfaZaeaeekekekekekekekekekekekekekacacaeaeaeaeaeaeaeaeaeaeaedYdYdYdYdYecececececedececececececdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdzdzdzdzdzdzdzdzdxdhdhdhdhdhdhdhdhdhdhdhdhdhdhadadadaNaQaQaQaNaeaedBdCdBdCdBdCdBdCdBdCdBdCdBaaacacacacacacacacacacaeaeaeaeaeaedpdpdpdpdpdpdpdtdtdtdtdtdtdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieieieieieieieieieiegdPdPdPdPdPdPdPdPdPdPdPdPdPdPbhadayaZbfbfbfaZaeaeekelekelekelekelekelekelekaaacacacacacacacacacacaeaeaeaeaeaedYdYdYdYdYdYdYececececececdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdxdzdzdzdzdzdzdzdxdhdhdhdhdhdhdhdhdhdhdhdhdhdhadadadaNaNaNaNaNaeaedBdCdBdCdBdCdBdCdBdCdBdCdBaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaedpdtdtdtdtdtdtdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieiegeieieieieieieiegdPdPdPdPdPdPdPdPdPdPdPdPdPdPbhadayaZaZaZaZaZaeaeekelekelekelekelekelekelekaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaedYececececececdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdzdzdzdzdzdxdzdzdzdzdzdzdzdxdhdhdhdhdhdhdhdhdhdhdhdfdfdfadadadacaeaeaeaeaeaedBdCdBdCdBdCdBdCdBdCdBdCdBaaaaaaaaaaaaaaaaaaaaacacacacacaeaeaeaeaeaeaeaedpdpdpdpdpdpdpdpaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegeieieieieiegeieieieieieieiegdPdPdPdPdPdPdPdPdPdPdPdNdNdNbhadayacaeaeaeaeaeaeekelekelekelekelekelekelekaaaaaaaaaaaaaaaaaaaaacacacacacaeaeaeaeaeaeaeaedYdYdYdYdYdYdYdYaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedxdxdxdxdxdxdxdxdxdxdxdxdxdxdxdhdhdhdhdhdhdhdhdhdhdhdhdhdfadadadacaeaeaeaeaeaedBdBdBdBdBdBdBdBdBdBdBdBdBaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeegegegegegegegegegegegegegegegdPdPdPdPdPdPdPdPdPdPdPdPdPdNbhadayaeaeaeaeaeaeaeekekekekekekekekekekekekekaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaedDdEdEdEdEdEdEdEdfdhdhdhdhdhdhdhdhdhdhdhdhdhdfadadaddFdFdFdFdFdFdFdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeemenenenenenenendNdPdPdPdPdPdPdPdPdPdPdPdPdPdNbhadayeoeoeoepeoeoeoeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaedDdEdEdEdEdEdEdEdDdDdfdhdhdfdfdfdfdfdhdhdfdfdfadadaddFdGdGdGdGdFdGdFdHdFdHdFdHdFdHdFdHdFdHdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeemenenenenenenenememdNdPdPdNdNdNdNdNdPdPdNdNdNbhadayeoeqeqeqeqeoeqeoepeoepeoepeoepeoepeoepeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaeaeacacacdDdEdEdEdEdEdEdEdEdEdEdEdEdEdEdfdhdhdhdhdhdhdfadadaddHdGdGdGdGdHdGdGdGdGdGdGdGdGdGdGdGdGdGdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaeaeacacacemenenenenenenenenenenenenenendNdPdPdPdPdPdPdNbhadbxeresesesesereseqeqeqeqeqeqeqeqeqeqeqeqeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaaaadDdEdEdEdEdEdEdEdEdEdEdEdEdEdEdfdhdhdhdhdhdhdfadadaddHdGdGdGdGdHdGdGdGdGdGdGdGdGdGdGdGdGdGdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaaaaemenenenenenenenenenenenenenendNdPdPdPdPdPdPdNbKbdbdeteueueueueteueqeqeqeqeqeqeqeqeqeqeqeqepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqararaqaaaadDdEdEdEdEdEdEdEdEdEdEdEdEdEdEdfdhdhdhdhdhdfdfadadaddFdGdGdGdGdFdGdGdGdGdGdGdGdGdGdGdGdGdGdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasawawasaaaaemenenenenenenenenenenenenenendNdPdPdPdPdPdNdNadadadeoeqeqeqeqeoeqeqeqeqeqeqeqeqeqeqeqeqeqepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqararaqaaaadIdIdIdIdIdEdEdEdEdEdEdEdEdEdEdfdhdhdhdhdhdhdJadadaddFdFdFdGdGdFdGdGdGdGdGdGdGdGdGdGdGdGdGdFdFdHdHdHdFdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasawawasaaaaevevevevevenenenenenenenenenendNdPdPdPdPdPdPewadadadeoeoeoeqeqeoeqeqeqeqeqeqeqeqeqeqeqeqeqeoeoepepepeoeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqararaqaaaadDdEdEdEdEdEdEdEdEdEdEdEdEdEdEdfdhdhdhdhdhdhdJadadaddGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasawawasaaaaemenenenenenenenenenenenenenendNdPdPdPdPdPdPewadadadeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaaaadDdEdEdEdEdEdEdEdEdEdEdEdEdEdEdfdhdhdhdhdhdfdfadadaddGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacaaaaemenenenenenenenenenenenenenendNdPdPdPdPdPdNdNadadadeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacacacdDdDdDdDdDdDdEdEdEdEdEdDdKdLdLdfdhdhdhdhdhdhdfadadaddFdFdFdGdGdFdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacacacememememememenenenenenemexeyeydNdPdPdPdPdPdPdNadadadeoeoeoeqeqeoeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaedMdNdNdNdNdNdNdNdKdOdOdfdhdhdhdhdhdhdfadadaddFdGdGdGdGdFdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejejejejejejejejejejejejejejejejejejejaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeezeAeAeAeAeAeAeAexeBeBdNdPdPdPdPdPdPdNadadadeoeqeqeqeqeoeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeqeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaedMdNdNdNdNdNdNdNdKdOdOdfdfdfdwdfdfdfdfadadaddHdGdGdGdGdHdGdGdGdGdGdGdGdPdPdPdPdPdGdGdGdGdGdGdGdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeezeAeAeAeAeAeAeAexeBeBdNdNdNefdNdNdNdNadadadepeqeqeqeqepeqeqeqeqeqeqeqeCeCeCeCeCeqeqeqeqeqeqeqepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaeaedMdNdNdNdNdNdNdNdKdOdOdOdOdOdOdOdOdOdKadadaddHdGdGdGdGdHdGdGdGdGdGdGdGdPdQdQdQdPdGdGdGdGdGdGdGdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaeaeezeAeAeAeAeAeAeAexeBeBeBeBeBeBeBeBeBexadadadepeqeqeqeqepeqeqeqeqeqeqeqeCeDeDeDeCeqeqeqeqeqeqeqepaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedMdNdNdNdNdNdNdNdKdOdOdOdOdOdOdOdOdOdKadadaddFdGdGdGdGdFdGdGdGdGdGdGdGdPdQdQdQdPdGdGdGdGdGdGdGdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeezeAeAeAeAeAeAeAexeBeBeBeBeBeBeBeBeBexadadadeoeqeqeqeqeoeqeqeqeqeqeqeqeCeDeDeDeCeqeqeqeqeqeqeqeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedMdNdNdNdNdNdNdNdKdOdOdOdOdOdOdOdOdOdKadadaddRdRdRdRdRdRdRdRdRdRdRdRdRdPdPdQdPdPdFdHdHdHdHdHdFdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeezeAeAeAeAeAeAeAexeBeBeBeBeBeBeBeBeBexadadadeEeEeEeEeEeEeEeEeEeEeEeEeEeCeCeDeCeCeoepepepepepeoeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedMdNdNdNdNdNdNdNdKdOdOdOdOdOdOdOdOdOdKadadaddRdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeezeAeAeAeAeAeAeAexeBeBeBeBeBeBeBeBeBexadadadeEeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedMdNdNdNdNdNdNdNdKdOdOdOdOdOdOdOdOdOdKadadaddRdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdSaaaadFdFdFdFdFdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeezeAeAeAeAeAeAeAexeBeBeBeBeBeBeBeBeBexadadadeEeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeFaaaaeoeoeoeoeoeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedMdMdMdMdMdMdMdMdKdKdKdKdKdKdKdKdKdKdKadadaddQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdSaaaadCdCdCdCdCdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeezezezezezezezezexexexexexexexexexexexadadadeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeFaaaaeleleleleleoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadadaddQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQaaaadCdCdCdCdCdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeadadadadeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDaaaaeleleleleleoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacadadaddQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQaaaadCdCdCdCdCdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacadadadeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDaaaaeleleleleleoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacacacacacacaeaedTdTdTdTdTdTdTacacacacadadaddQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdSaaaadCdCdCdCdCdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacacacacacacaeaeeGeGeGeGeGeGeGacacacacadadadeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeFaaaaeleleleleleoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaacaeaedTdUdUdUdUdUdTdVdVdVdVadadaddRdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdSaaaadFdFdFdFdFdFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaacaeaeeGeHeHeHeHeHeGeIeIeIeIadadadeEeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeFaaaaeoeoeoeoeoeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedTdUdUdUdUdUdTdVdVdVdVadadaddRdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdQdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeeGeHeHeHeHeHeGeIeIeIeIadadadeEeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeDeEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedTdUdUdUdUdUdTdVdVdVdVadadaddRdRdSdSdRdSdSdRdSdSdRdRdRdRdQdRdRdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeeGeHeHeHeHeHeGeIeIeIeIadadadeEeEeFeFeEeFeFeEeFeFeEeEeEeEeDeEeEeEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaedTdTdTdUdTdTdTdVdVdVdVadadadacaaaaaaaaaaaaaaaaaaaadWdXdXdXdXdXdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeeGeGeGeHeGeGeGeIeIeIeIadadadacaaaaaaaaaaaaaaaaaaaaeJeKeKeKeKeKeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaedVdVdVdVdVdVdVdVdVdVadadadacaaaaaaaaaaaaaaaaaaaadWdXdXdXdXdXdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaeeIeIeIeIeIeIeIeIeIeIadadadacaaaaaaaaaaaaaaaaaaaaeJeKeKeKeKeKeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeacdVdVdVdVdVdVdVdVdVdVadadadacaaaaaaaaaaaaaaaaaaaadWdXdXdXdXdXdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaeaeaceIeIeIeIeIeIeIeIeIeIadadadacaaaaaaaaaaaaaaaaaaaaeJeKeKeKeKeKeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacdVdVdVdVdVdVdVdVdVdVadadadacacaeaeacaeaeacaeaeacdWdXdXdXdXdXdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaceIeIeIeIeIeIeIeIeIeIadadadacacaeaeacaeaeacaeaeaceJeKeKeKeKeKeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadaddWdXdXdXdXdXdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadeJeKeKeKeKeKeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadaddWdWdWdWdWdWdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadeJeJeJeJeJeJeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaeaeacaeaeacacadacaeaeaeacadacacacaeaeacaeaeacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaeaeacaeaeacacadacaeaeaeacadacacacaeaeacaeaeacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadacaaaaaaacadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadacaaaaaaacadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadacaaaaaaacadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadacaaaaaaacadacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYdYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLeLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||||
|
|||||||
Reference in New Issue
Block a user