Adds engine core atmos control

Expands on the earlier engine pump fix to add proper control over the
engine core atmos. Adds core control computer that can set output
external pressure bound instead of output pressure, and special high
power vent pump type for the engine core.
This commit is contained in:
mwerezak
2014-08-29 14:10:43 -04:00
parent cecfc8ddbb
commit b381d46556
5 changed files with 137 additions and 8 deletions

View File

@@ -86,6 +86,15 @@
..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
/obj/machinery/atmospherics/unary/vent_pump/engine
name = "Engine Core Vent"
power_channel = ENVIRON
active_power_usage = 15000 //15 kW ~ 20 HP
/obj/machinery/atmospherics/unary/vent_pump/engine/New()
..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)
if(!check_icon_cache())
return

View File

@@ -84,7 +84,7 @@ On the map:
1311 for prison shuttle console (in fact, it is not used)
1435 for status displays
1437 for atmospherics/fire alerts
1439 for engine components
1438 for engine components
1439 for air pumps, air scrubbers, atmo control
1441 for atmospherics - supply tanks
1443 for atmospherics - distribution loop/mixed air tank

View File

@@ -156,6 +156,7 @@
icon = 'icons/obj/computer.dmi'
icon_state = "tank"
frequency = 1441
var/input_tag
var/output_tag
@@ -172,12 +173,12 @@
//if(signal.data)
// input_info = signal.data // Attempting to fix intake control -- TLE
output += "<B>Tank Control System</B><BR>"
output += "<B>Tank Control System</B><BR><BR>"
if(input_info)
var/power = (input_info["power"])
var/volume_rate = round(input_info["volume_rate"], 0.1)
output += "<B>Input</B>: [power?("Injecting"):("On Hold")] <A href='?src=\ref[src];in_refresh_status=1'>Refresh</A><BR>Flow Rate Limit: [volume_rate] L/s<BR>"
output += "Command: <A href='?src=\ref[src];in_toggle_injector=1'>Toggle Power</A> <A href='?src=\ref[src];in_set_flowrate=1'>Set Flow Rate</A><BR><BR>"
output += "Command: <A href='?src=\ref[src];in_toggle_injector=1'>Toggle Power</A> <A href='?src=\ref[src];in_set_flowrate=1'>Set Flow Rate</A><BR>"
else
output += "<FONT color='red'>ERROR: Can not find input port</FONT> <A href='?src=\ref[src];in_refresh_status=1'>Search</A><BR>"
@@ -265,6 +266,120 @@ Max Output Pressure: [output_pressure] kPa<BR>"}
spawn(5)
src.updateUsrDialog()
/obj/machinery/computer/general_air_control/supermatter_core
icon = 'icons/obj/computer.dmi'
icon_state = "tank"
frequency = 1438
var/input_tag
var/output_tag
var/list/input_info
var/list/output_info
var/input_flow_setting = 700
var/pressure_setting = 100
circuit = /obj/item/weapon/circuitboard/air_management/supermatter_core
/obj/machinery/computer/general_air_control/supermatter_core/return_text()
var/output = ..()
//if(signal.data)
// input_info = signal.data // Attempting to fix intake control -- TLE
output += "<B>Core Cooling Control System</B><BR><BR>"
if(input_info)
var/power = (input_info["power"])
var/volume_rate = round(input_info["volume_rate"], 0.1)
output += "<B>Coolant Input</B>: [power?("Injecting"):("On Hold")] <A href='?src=\ref[src];in_refresh_status=1'>Refresh</A><BR>Flow Rate Limit: [volume_rate] L/s<BR>"
output += "Command: <A href='?src=\ref[src];in_toggle_injector=1'>Toggle Power</A> <A href='?src=\ref[src];in_set_flowrate=1'>Set Flow Rate</A><BR>"
else
output += "<FONT color='red'>ERROR: Can not find input port</FONT> <A href='?src=\ref[src];in_refresh_status=1'>Search</A><BR>"
output += "Flow Rate Limit: <A href='?src=\ref[src];adj_input_flow_rate=-100'>-</A> <A href='?src=\ref[src];adj_input_flow_rate=-10'>-</A> <A href='?src=\ref[src];adj_input_flow_rate=-1'>-</A> <A href='?src=\ref[src];adj_input_flow_rate=-0.1'>-</A> [round(input_flow_setting, 0.1)] L/s <A href='?src=\ref[src];adj_input_flow_rate=0.1'>+</A> <A href='?src=\ref[src];adj_input_flow_rate=1'>+</A> <A href='?src=\ref[src];adj_input_flow_rate=10'>+</A> <A href='?src=\ref[src];adj_input_flow_rate=100'>+</A><BR>"
output += "<BR>"
if(output_info)
var/power = (output_info["power"])
var/pressure_limit = output_info["external"]
output += {"<B>Core Outpump</B>: [power?("On"):("Off")] <A href='?src=\ref[src];out_refresh_status=1'>Refresh</A><BR>
Min Core Pressure: [pressure_limit] kPa<BR>"}
output += "Command: <A href='?src=\ref[src];out_toggle_power=1'>Toggle Power</A> <A href='?src=\ref[src];out_set_pressure=1'>Set Pressure</A><BR>"
else
output += "<FONT color='red'>ERROR: Can not find output port</FONT> <A href='?src=\ref[src];out_refresh_status=1'>Search</A><BR>"
output += "Min Core Pressure Set: <A href='?src=\ref[src];adj_pressure=-100'>-</A> <A href='?src=\ref[src];adj_pressure=-50'>-</A> <A href='?src=\ref[src];adj_pressure=-10'>-</A> <A href='?src=\ref[src];adj_pressure=-1'>-</A> [pressure_setting] kPa <A href='?src=\ref[src];adj_pressure=1'>+</A> <A href='?src=\ref[src];adj_pressure=10'>+</A> <A href='?src=\ref[src];adj_pressure=50'>+</A> <A href='?src=\ref[src];adj_pressure=100'>+</A><BR>"
return output
/obj/machinery/computer/general_air_control/supermatter_core/receive_signal(datum/signal/signal)
if(!signal || signal.encryption) return
var/id_tag = signal.data["tag"]
if(input_tag == id_tag)
input_info = signal.data
else if(output_tag == id_tag)
output_info = signal.data
else
..(signal)
/obj/machinery/computer/general_air_control/supermatter_core/Topic(href, href_list)
if(..())
return
if(href_list["adj_pressure"])
var/change = text2num(href_list["adj_pressure"])
pressure_setting = between(0, pressure_setting + change, 10*ONE_ATMOSPHERE)
spawn(1)
src.updateUsrDialog()
return
if(href_list["adj_input_flow_rate"])
var/change = text2num(href_list["adj_input_flow_rate"])
input_flow_setting = between(0, input_flow_setting + change, ATMOS_DEFAULT_VOLUME_PUMP + 500) //default flow rate limit for air injectors
spawn(1)
src.updateUsrDialog()
return
if(!radio_connection)
return 0
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.source = src
if(href_list["in_refresh_status"])
input_info = null
signal.data = list ("tag" = input_tag, "status")
if(href_list["in_toggle_injector"])
input_info = null
signal.data = list ("tag" = input_tag, "power_toggle")
if(href_list["in_set_flowrate"])
input_info = null
signal.data = list ("tag" = input_tag, "set_volume_rate" = "[input_flow_setting]")
if(href_list["out_refresh_status"])
output_info = null
signal.data = list ("tag" = output_tag, "status")
if(href_list["out_toggle_power"])
output_info = null
signal.data = list ("tag" = output_tag, "power_toggle")
if(href_list["out_set_pressure"])
output_info = null
signal.data = list ("tag" = output_tag, "set_external_pressure" = "[pressure_setting]", "checks" = 1)
signal.data["sigtype"]="command"
radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
spawn(5)
src.updateUsrDialog()
/obj/machinery/computer/general_air_control/fuel_injection
icon = 'icons/obj/computer.dmi'
icon_state = "atmos"

View File

@@ -132,6 +132,11 @@
/obj/item/weapon/circuitboard/air_management/tank_control
name = "Circuit board (Tank Control)"
build_path = "/obj/machinery/computer/general_air_control/large_tank_control"
frequency = 1441
/obj/item/weapon/circuitboard/air_management/supermatter_core
name = "Circuit board (Core Control)"
build_path = "/obj/machinery/computer/general_air_control/supermatter_core"
frequency = 1438
/obj/item/weapon/circuitboard/air_management/injector_control
name = "Circuit board (Injector Control)"
build_path = "/obj/machinery/computer/general_air_control/fuel_injection"

View File

@@ -5883,7 +5883,7 @@
"cjg" = (/obj/item/weapon/wirecutters,/turf/space,/area/space)
"cjh" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light,/obj/machinery/door_control{id = "engine_electrical_maintenance"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 5; pixel_y = -25; req_access_txt = "10"; specialfunctions = 4},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/engine/engine_smes)
"cji" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_smes)
"cjj" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; pressure_setting = 4000; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring)
"cjj" = (/obj/machinery/computer/general_air_control/supermatter_core{frequency = 1438; input_tag = "cooling_in"; name = "Engine Cooling Control"; output_tag = "cooling_out"; pressure_setting = 100; sensors = list("engine_sensor" = "Engine Core")},/turf/simulated/floor{icon_state = "warning"},/area/engine/engine_monitoring)
"cjk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/workshop)
"cjl" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/atmos)
"cjm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/workshop)
@@ -7500,7 +7500,7 @@
"cOl" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/unsimulated/floor,/area/shuttle/specops/centcom)
"cOm" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1443; listening = 1; name = "Spec Ops Intercom"; pixel_y = 28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"cOn" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
"cOo" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "cooling_in"; name = "Nitrogen Injector"; on = 1; pixel_y = 1; volume_rate = 200},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cOo" = (/obj/machinery/air_sensor{frequency = 1438; id_tag = "engine_sensor"; output = 63},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
"cOp" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"cOq" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"cOr" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{dir = 1; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
@@ -7508,7 +7508,7 @@
"cOt" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
"cOu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/centcom/holding)
"cOv" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/computer/security/telescreen{desc = ""; name = "Spec. Ops. Monitor"; network = list("ERT"); pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"cOw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "cooling_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; on = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cOw" = (/obj/machinery/atmospherics/unary/vent_pump/engine{dir = 1; external_pressure_bound = 100; external_pressure_bound_default = 0; frequency = 1438; icon_state = "map_vent_in"; id_tag = "cooling_out"; initialize_directions = 1; on = 1; pressure_checks = 1; pressure_checks_default = 1; pump_direction = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cOx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Engine Waste Handling"; req_one_access_txt = "10;24"},/turf/simulated/floor/plating,/area/maintenance/engi_engine)
"cOy" = (/turf/unsimulated/wall,/area/centcom/ferry)
"cOz" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = -4; pixel_y = -3; pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 4; pixel_y = 5; pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreen"},/area/centcom/holding)
@@ -7523,7 +7523,7 @@
"cOI" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom)
"cOJ" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{tag = "icon-escapecorner (EAST)"; icon_state = "escapecorner"; dir = 4},/area/centcom/holding)
"cOK" = (/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/ferry)
"cOL" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "engine_sensor"; output = 63},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
"cOL" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1438; icon_state = "map_injector"; id = "cooling_in"; name = "Coolant Injector"; on = 1; pixel_y = 1; volume_rate = 700},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cOM" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"cON" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/medical/morgue)
"cOO" = (/turf/unsimulated/beach/sand{tag = "icon-beachcorner"; icon_state = "beachcorner"},/area/centcom/ferry)
@@ -11276,7 +11276,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaecfWchecfYaaacfWchecfYaaecfWchecfYaaeaaaaaaaaeaaecmVaaaaaaaaaaaaaaaaaaaaaaaaaaacjVclzcnGcnHcodclVcagcoocotcoecolcnrcndcmWcascascascnEcnDcnFbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaacfWchecfYaaecfWchecfYaaacfWchecfYaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaacjVcSJcSfcRJctkcPDbZCcRZcRQcROcRfcRecRfcRbcRdcRDcRIcRicRCcQNbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaDaaeaaacfWchecfYaaecfWchecfYaaacfWchecfYaaeaaaaaaaaaaaaaaeaaecjMcjNcjNcjNcjNcOXcPddgDcOGcOGcOGcOxbZjbZCbZCcPVbZjbZjbZjcPacPWcQHbZjbZjbZjcQJcRccPSbZjaaeaaabCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaaaaeaaeckAaaeaaeaaeckAaaeaaaaaeckAaaeaaaaaaaaaaaaaaackBckCckDckEckFcPBcPqdhRdgEdigdicdicdihdpKbZjcOWbZCcvGcttcvEcIGcOwcOLcOocIGctscttcyVbZCcFabZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaaaaeaaeckAaaeaaeaaeckAaaeaaaaaeckAaaeaaaaaaaaaaaaaaackBckCckDckEckFcPBcPqdhRdgEdigdicdicdihdpKbZjcOWbZCcvGcttcvEcIGcOwcOocOLcIGctscttcyVbZCcFabZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaecltclucluclvclwclwclwclwclwclwclwclwclwclwclwclwclwclwcEZclydidcELcBvclCcwKclEdyKdyKdyKdyKdyMdyKdyNbZjbZCbZCcvGcttcvEcwIctpcyWcyXcwIctscttcyVbZCcyhbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaaaaeaaecmeaaeaaaaaecmeaaeaaaaaecmeaaeaaaaaaaaaaaaaaackBckCcmfcmgcmhdcCcjNdyPdyOdicdicdyQdyQdyRbZjbZCbZCcvFcttcvEctoctpctqctmctoctscttctrbZCbZCbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaDaaeaaecfWcmLcfYaaacfWcmLcfYaaacfWcmLcfYaaeaaaaaaaaaaaaaaeaaecmMcjNcjNcjNcjNcOXcPddfHdfHdgDcOXcOXbZjbZjctkbZjbZjbZjbZjbZjctlbZjbZjbZjbZjbZjctkbZjbZjaaeaaeaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa