From 3f81cef604b2b5e55b3703d6f19e5561d262ab5c Mon Sep 17 00:00:00 2001 From: skull132 Date: Sun, 20 Dec 2015 23:38:44 +0200 Subject: [PATCH 01/26] dbcore.dm - Ledgibility Update Makes the code more readable and more spaced out. --- code/defines/procs/dbcore.dm | 154 +++++++++++++++++++++-------------- 1 file changed, 92 insertions(+), 62 deletions(-) diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm index ddc7191e..15bb699d 100644 --- a/code/defines/procs/dbcore.dm +++ b/code/defines/procs/dbcore.dm @@ -48,45 +48,44 @@ DBConnection var/server = "" var/port = 3306 -DBConnection/New(dbi_handler,username,password_handler,cursor_handler) - src.dbi = dbi_handler - src.user = username - src.password = password_handler - src.default_cursor = cursor_handler +DBConnection/New(dbi_handler, username, password_handler, cursor_handler) + dbi = dbi_handler + user = username + password = password_handler + default_cursor = cursor_handler _db_con = _dm_db_new_con() -DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) - if(!sqllogging) +DBConnection/proc/Connect(dbi_handler = dbi, user_handler = user, password_handler = password, cursor_handler) + if (!sqllogging) return 0 - if(!src) return 0 - cursor_handler = src.default_cursor - if(!cursor_handler) cursor_handler = Default_Cursor - return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null) + if (!src) + return 0 + cursor_handler = default_cursor + if (!cursor_handler) + cursor_handler = Default_Cursor + return _dm_db_connect(_db_con,dbi_handler, user_handler, password_handler, cursor_handler, null) -DBConnection/proc/Disconnect() return _dm_db_close(_db_con) +DBConnection/proc/Disconnect() + return _dm_db_close(_db_con) DBConnection/proc/IsConnected() - if(!sqllogging) return 0 + if(!sqllogging) + return 0 var/success = _dm_db_is_connected(_db_con) return success -DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str) +DBConnection/proc/Quote(str) + return _dm_db_quote(_db_con,str) + +DBConnection/proc/ErrorMsg() + return _dm_db_error_msg(_db_con) -DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con) DBConnection/proc/SelectDB(database_name,dbi) if(IsConnected()) Disconnect() //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) - return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password) -DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler) - - -DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler) - if(sql_query) src.sql = sql_query - if(connection_handler) src.db_connection = connection_handler - if(cursor_handler) src.default_cursor = cursor_handler - _db_query = _dm_db_new_query() - return ..() + return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]", user, password) +DBConnection/proc/NewQuery(sql_query, cursor_handler = default_cursor) return new/DBQuery(sql_query, src, cursor_handler) DBQuery var/sql // The sql query being executed. @@ -98,34 +97,49 @@ DBQuery var/DBConnection/db_connection var/_db_query -DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler +DBQuery/New(var/sql_query, var/DBConnection/connection_handler, var/cursor_handler) + if (sql_query) + sql = sql_query + if (connection_handler) + db_connection = connection_handler + if (cursor_handler) + default_cursor = cursor_handler + _db_query = _dm_db_new_query() + return ..() + +DBQuery/proc/Connect(DBConnection/connection_handler) + db_connection = connection_handler DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) Close() - return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) + return _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null) -DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) +DBQuery/proc/NextRow() + return _dm_db_next_row(_db_query,item,conversions) -DBQuery/proc/RowsAffected() return _dm_db_rows_affected(_db_query) +DBQuery/proc/RowsAffected() + return _dm_db_rows_affected(_db_query) -DBQuery/proc/RowCount() return _dm_db_row_count(_db_query) +DBQuery/proc/RowCount() + return _dm_db_row_count(_db_query) -DBQuery/proc/ErrorMsg() return _dm_db_error_msg(_db_query) +DBQuery/proc/ErrorMsg() + return _dm_db_error_msg(_db_query) DBQuery/proc/Columns() - if(!columns) + if (!columns) columns = _dm_db_columns(_db_query,/DBColumn) return columns DBQuery/proc/GetRowData() var/list/columns = Columns() var/list/results - if(columns.len) + if (columns.len) results = list() - for(var/C in columns) - results+=C + for (var/C in columns) + results += C var/DBColumn/cur_col = columns[C] - results[C] = src.item[(cur_col.position+1)] + results[C] = item[(cur_col.position+1)] return results DBQuery/proc/Close() @@ -138,9 +152,12 @@ DBQuery/proc/Quote(str) return db_connection.Quote(str) DBQuery/proc/SetConversion(column,conversion) - if(istext(column)) column = columns.Find(column) - if(!conversions) conversions = new/list(column) - else if(conversions.len < column) conversions.len = column + if (istext(column)) + column = columns.Find(column) + if (!conversions) + conversions = new/list(column) + else if (conversions.len < column) + conversions.len = column conversions[column] = conversion @@ -153,32 +170,45 @@ DBColumn var/length var/max_length -DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler) - src.name = name_handler - src.table = table_handler - src.position = position_handler - src.sql_type = type_handler - src.flags = flag_handler - src.length = length_handler - src.max_length = max_length_handler +DBColumn/New(name_handler, table_handler, position_handler, type_handler, flag_handler, length_handler, max_length_handler) + name = name_handler + table = table_handler + position = position_handler + sql_type = type_handler + flags = flag_handler + length = length_handler + max_length = max_length_handler return ..() -DBColumn/proc/SqlTypeName(type_handler=src.sql_type) - switch(type_handler) - if(TINYINT) return "TINYINT" - if(SMALLINT) return "SMALLINT" - if(MEDIUMINT) return "MEDIUMINT" - if(INTEGER) return "INTEGER" - if(BIGINT) return "BIGINT" - if(FLOAT) return "FLOAT" - if(DOUBLE) return "DOUBLE" - if(DATE) return "DATE" - if(DATETIME) return "DATETIME" - if(TIMESTAMP) return "TIMESTAMP" - if(TIME) return "TIME" - if(STRING) return "STRING" - if(BLOB) return "BLOB" +DBColumn/proc/SqlTypeName(type_handler = sql_type) + switch (type_handler) + if (TINYINT) + return "TINYINT" + if (SMALLINT) + return "SMALLINT" + if (MEDIUMINT) + return "MEDIUMINT" + if (INTEGER) + return "INTEGER" + if (BIGINT) + return "BIGINT" + if (FLOAT) + return "FLOAT" + if (DOUBLE) + return "DOUBLE" + if (DATE) + return "DATE" + if (DATETIME) + return "DATETIME" + if (TIMESTAMP) + return "TIMESTAMP" + if (TIME) + return "TIME" + if (STRING) + return "STRING" + if (BLOB) + return "BLOB" #undef Default_Cursor From 1cef93657b2e50a3f85485708c7899bdd1bf5ffe Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 21 Dec 2015 11:19:46 +0200 Subject: [PATCH 02/26] dbcore.dm - parseArguments() Addition A function that automatically sanitizes input for your SQL query, should you wish to use it. Can be called up on its own, or through the Execute() function by adding the argument list as the first parametre. --- code/defines/procs/dbcore.dm | 44 ++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm index 15bb699d..af387497 100644 --- a/code/defines/procs/dbcore.dm +++ b/code/defines/procs/dbcore.dm @@ -85,7 +85,8 @@ DBConnection/proc/SelectDB(database_name,dbi) //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]", user, password) -DBConnection/proc/NewQuery(sql_query, cursor_handler = default_cursor) return new/DBQuery(sql_query, src, cursor_handler) +DBConnection/proc/NewQuery(sql_query, cursor_handler = default_cursor) + return new/DBQuery(sql_query, src, cursor_handler) DBQuery var/sql // The sql query being executed. @@ -110,8 +111,12 @@ DBQuery/New(var/sql_query, var/DBConnection/connection_handler, var/cursor_handl DBQuery/proc/Connect(DBConnection/connection_handler) db_connection = connection_handler -DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) +DBQuery/proc/Execute(var/list/argumentList = null, var/passNotFound = 0, sql_query = sql, cursor_handler = default_cursor) Close() + + if (argumentList) + parseArguments(argumentList, passNotFound) + return _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null) DBQuery/proc/NextRow() @@ -160,6 +165,41 @@ DBQuery/proc/SetConversion(column,conversion) conversions.len = column conversions[column] = conversion +/* Works similarly to the PDO object's Execute() method in PHP. +* Insert a list of keys/values, it searches the SQL syntax for the keys, +* and replaces them with sanitized versions of the values. +* Can be called independently, or through dbcon.Execute(), where the list would be the first argument. +* passNotFound controls whether or not is passes keys not found in the SQL query. +* Keys are /case-sensitive/, be careful! +* Returns FALSE upon failure, TRUE otherwise, so it can be used in checks and so on. +* - Skull132 +*/ +DBQuery/proc/parseArguments(var/list/argumentList, var/passNotFound = 0) + if (!sql || !argumentList || !argumentList.len) + return 0 + + for (var/placeholder in argumentList) + if (!findtextEx(sql, placeholder)) + if (passNotFound) + continue + else + return 0 + + var/argument = argumentList[placeholder] + + if (isnull(argument)) + argument = "NULL" + else if (istext(argument)) + argument = dbcon.Quote(argument) + else if (isnum(argument)) + argument = "'[argument]'" + else + return 0 + + sql = replacetextEx(sql, placeholder, argument) + + return 1 + DBColumn var/name From 51c5151e4a0e602597a58b5abc49a0f84ab7a9d8 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 21 Dec 2015 11:34:48 +0200 Subject: [PATCH 03/26] ss13_connection_log Adds the ss13_connection_log table that's constantly being filled out by the game every time a client connects. --- SQL/aurora_schema.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/SQL/aurora_schema.sql b/SQL/aurora_schema.sql index c33433bd..b88f9105 100644 --- a/SQL/aurora_schema.sql +++ b/SQL/aurora_schema.sql @@ -120,3 +120,17 @@ CREATE TABLE `ss13_santa` ( `gift_assigned` varchar(255) DEFAULT NULL, PRIMARY KEY (`character_name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ------------------------------ +-- SQL based connection log +-- tgstation.ss13_connection_log +-- ------------------------------ +CREATE TABLE `ss13_connection_log` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `datetime` DATETIME NOT NULL, + `serverip` VARCHAR(32) NOT NULL, + `ckey` VARCHAR(32) NOT NULL, + `ip` VARCHAR(32) NOT NULL, + `computerid` VARCHAR(32) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; From 14b99501a1979d3540a64329feb7afd3e938ca2a Mon Sep 17 00:00:00 2001 From: skull132 Date: Tue, 22 Dec 2015 12:44:50 +0200 Subject: [PATCH 04/26] Fixes Fuel Fires Code update courtesy of @mwerezak from Baystation12. --- code/ZAS/Fire.dm | 177 ++++++++++-------- code/ZAS/Zone.dm | 13 +- code/ZAS/_gas_mixture_xgm.dm | 16 +- code/game/machinery/atmoalter/canister.dm | 4 +- .../objects/effects/decals/Cleanable/fuel.dm | 34 ++-- code/setup.dm | 12 ++ 6 files changed, 155 insertions(+), 101 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index c6bd68c4..cdbbd6cd 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -35,37 +35,34 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) if(air_contents.check_combustability(liquid)) igniting = 1 - create_fire(1000) + create_fire(vsc.fire_firelevel_multiplier) return igniting /zone/proc/process_fire() - if(!air.check_combustability()) + var/datum/gas_mixture/burn_gas = air.remove_ratio(vsc.fire_consuption_rate, fire_tiles.len) + + var/firelevel = burn_gas.zburn(src, fire_tiles, force_burn = 1, no_check = 1) + + air.merge(burn_gas) + + if (firelevel) + for (var/turf/T in fire_tiles) + if (T.fire) + T.fire.firelevel = firelevel + else + var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T + fire_tiles -= T + fuel_objs -= fuel + else for(var/turf/simulated/T in fire_tiles) if(istype(T.fire)) T.fire.RemoveFire() T.fire = null fire_tiles.Cut() + fuel_objs.Cut() if(!fire_tiles.len) air_master.active_fire_zones.Remove(src) - return - - var/datum/gas_mixture/burn_gas = air.remove_ratio(vsc.fire_consuption_rate, fire_tiles.len) - var/gm = burn_gas.group_multiplier - - burn_gas.group_multiplier = 1 - burn_gas.zburn(force_burn = 1, no_check = 1) - burn_gas.group_multiplier = gm - - air.merge(burn_gas) - - var/firelevel = air.calculate_firelevel() - - for(var/turf/T in fire_tiles) - if(T.fire) - T.fire.firelevel = firelevel - else - fire_tiles -= T /turf/proc/create_fire(fl) return 0 @@ -79,8 +76,13 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) return 1 fire = new(src, fl) - zone.fire_tiles |= src air_master.active_fire_zones |= zone + + var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in src + zone.fire_tiles |= src + if (fuel) + zone.fuel_objs += fuel + return 0 /obj/fire @@ -123,8 +125,8 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) SetLuminosity(3) //im not sure how to implement a version that works for every creature so for now monkeys are firesafe - for(var/mob/living/carbon/human/M in loc) - M.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure()) //Burn the humans! + for(var/mob/living/L in loc) + L.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure()) //Burn the mobs! loc.fire_act(air_contents, air_contents.temperature, air_contents.volume) for(var/atom/A in loc) @@ -146,10 +148,11 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) if(!enemy_tile.zone || enemy_tile.fire) continue - if(!enemy_tile.zone.fire_tiles.len) - var/datum/gas_mixture/acs = enemy_tile.return_air() - if(!acs || !acs.check_combustability()) - continue + //if(!enemy_tile.zone.fire_tiles.len) + var/datum/gas_mixture/acs = enemy_tile.return_air() + var/obj/effect/decal/cleanable/liquid_fuel/liquid = locate() in enemy_tile + if(!acs || !acs.check_combustability(liquid)) + continue //If extinguisher mist passed over the turf it's trying to spread to, don't spread and //reduce firelevel. @@ -178,10 +181,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) /obj/fire/Del() if (istype(loc, /turf/simulated)) - SetLuminosity(0) - - loc = null - air_master.active_hotspots.Remove(src) + RemoveFire() ..() @@ -198,65 +198,101 @@ turf/simulated/apply_fire_protection() fire_protection = world.time -datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, force_burn, no_check = 0) +datum/gas_mixture/proc/zburn(zone/zone, force_burn, no_check = 0) . = 0 - if((temperature > PLASMA_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(liquid))) + if ((temperature > PLASMA_MINIMUM_BURN_TEMPERATURE || force_burn) && (no_check ||check_recombustability(zone? zone.fuel_objs : null))) + var/gas_fuel = 0 + var/liquid_fuel = 0 var/total_fuel = 0 var/total_oxidizers = 0 - for(var/g in gas) + for (var/g in gas) if(gas_data.flags[g] & XGM_GAS_FUEL) - total_fuel += gas[g] + gas_fuel += gas[g] if(gas_data.flags[g] & XGM_GAS_OXIDIZER) total_oxidizers += gas[g] + gas_fuel *= group_multiplier + total_oxidizers *= group_multiplier - if(liquid) - //Liquid Fuel - if(liquid.amount <= 0.1) - del liquid - else - total_fuel += liquid.amount + if (zone) + for (var/obj/effect/decal/cleanable/liquid_fuel/fuel in zone.fuel_objs) + liquid_fuel += fuel.amount*LIQUIDFUEL_AMOUNT_TO_MOL - if(total_fuel == 0) + total_fuel = gas_fuel + liquid_fuel + + if (total_fuel <= 0.005) return 0 - //Calculate the firelevel. - var/firelevel = calculate_firelevel(liquid, total_fuel, total_oxidizers, force = 1) + //*** Determine how fast the fire burns - //get the current inner energy of the gas mix + //calculate the firelevel. + var/firelevel = calculate_firelevel(zone? zone.fuel_objs : null, total_fuel, total_oxidizers, force = 1) + + //get the current thermal energy of the gas mix //this must be taken here to prevent the addition or deletion of energy by a changing heat capacity var/starting_energy = temperature * heat_capacity() - //determine the amount of oxygen used - var/used_oxidizers = min(total_oxidizers, total_fuel / 2) + //determine how far the reaction can progress + var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit - //determine the amount of fuel actually used - var/used_fuel_ratio = min(2 * total_oxidizers , total_fuel) / total_fuel - total_fuel = total_fuel * used_fuel_ratio + //determine the actual rate of reaction, as measured by the amount of fuel reacting - var/total_reactants = total_fuel + used_oxidizers + //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn). + var/gas_reaction_progress = max(0.2*group_multiplier, (firelevel/vsc.fire_firelevel_multiplier)*gas_fuel)*FIRE_GAS_BURNRATE_MULT + //liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning (which is sort of accounted for by firelevel). Having more fuel means a longer burn. + var/liquid_reaction_progress = (firelevel/vsc.fire_firelevel_multiplier)*FIRE_LIQUID_BURNRATE_MULT - //determine the amount of reactants actually reacting - var/used_reactants_ratio = min(max(total_reactants * firelevel / vsc.fire_firelevel_multiplier, 0.2), total_reactants) / total_reactants + //world << "liquid_reaction_progress = [liquid_reaction_progress]" + //world << "gas_reaction_progress = [gas_reaction_progress]" + + var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress + var/used_fuel = min(total_reaction_progress, reaction_limit) + var/used_oxidizers = used_fuel*(FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT) + //world << "used_fuel = [used_fuel]; used_oxidizers = [used_oxidizers]; reaction_limit=[reaction_limit]" + + if (zone && zone.fuel_objs.len) + if (used_fuel <= FIRE_LIQUD_MIN_BURNRATE) + return 0 + else if (used_fuel <= FIRE_GAS_MIN_BURNRATE * group_multiplier) + return 0 + + //*** Remove fuel and oxidizer, add carbon dioxide and heat //remove and add gasses as calculated - remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers * used_reactants_ratio) - remove_by_flag(XGM_GAS_FUEL, total_fuel * used_reactants_ratio) + var/used_gas_fuel = min(used_fuel*(gas_reaction_progress/total_reaction_progress), gas_fuel) //remove in proportion to the relative reaction progress + var/used_liquid_fuel = between(0, used_fuel-used_gas_fuel, liquid_fuel) - adjust_gas("carbon_dioxide", max(total_fuel*used_reactants_ratio, 0)) + //remove_by_flag() and adjust_gas() handle the group_multiplier for us. + remove_by_flag(XGM_GAS_OXIDIZER, used_oxidizers) + remove_by_flag(XGM_GAS_FUEL, used_gas_fuel) + adjust_gas("carbon_dioxide", used_oxidizers) - if(liquid) - liquid.amount -= (liquid.amount * used_fuel_ratio * used_reactants_ratio) * 5 // liquid fuel burns 5 times as quick + //As a simplification, we remove fuel equally from all fuel sources. It might be that some fuel sources have more fuel, some have less, but whatever. + if(zone && zone.fuel_objs.len) + var/fuel_to_remove = used_liquid_fuel/(zone.fuel_objs.len*LIQUIDFUEL_AMOUNT_TO_MOL) //convert back to liquid volume units + //world << "used gas fuel = [used_gas_fuel]; used other fuel = [used_fuel-used_gas_fuel]; fuel_to_remove = [fuel_to_remove]" + var/liquidonly = !check_combustability() + for(var/O in zone.fuel_objs) + var/obj/effect/decal/cleanable/liquid_fuel/fuel = O + if(!istype(fuel)) + zone.fuel_objs -= fuel + continue - if(liquid.amount <= 0) del liquid + fuel.amount -= fuel_to_remove + if(fuel.amount <= 0) + zone.fuel_objs -= fuel + if(liquidonly) + var/turf/T = fuel.loc + if(istype(T) && T.fire) del(T.fire) + del(fuel) //calculate the energy produced by the reaction and then set the new temperature of the mix - temperature = (starting_energy + vsc.fire_fuel_energy_release * total_fuel) / heat_capacity() + temperature = (starting_energy + vsc.fire_fuel_energy_release * used_fuel) / heat_capacity() update_values() - . = total_reactants * used_reactants_ratio + return firelevel -datum/gas_mixture/proc/check_recombustability(obj/effect/decal/cleanable/liquid_fuel/liquid) +datum/gas_mixture/proc/check_recombustability(list/fuel_objs) . = 0 for(var/g in gas) if(gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1) @@ -266,7 +302,7 @@ datum/gas_mixture/proc/check_recombustability(obj/effect/decal/cleanable/liquid_ if(!.) return 0 - if(liquid) + if(fuel_objs && fuel_objs.len) return 1 . = 0 @@ -275,7 +311,7 @@ datum/gas_mixture/proc/check_recombustability(obj/effect/decal/cleanable/liquid_ . = 1 break -datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid) +datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fuel/liquid = null) . = 0 for(var/g in gas) if(gas_data.flags[g] & XGM_GAS_OXIDIZER && QUANTIZE(gas[g] * vsc.fire_consuption_rate) >= 0.1) @@ -294,20 +330,11 @@ datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fu . = 1 break -datum/gas_mixture/proc/calculate_firelevel(obj/effect/decal/cleanable/liquid_fuel/liquid, total_fuel = null, total_oxidizers = null, force = 0) +/datum/gas_mixture/proc/calculate_firelevel(list/fuel_objs, total_fuel, total_oxidizers, force = 0) //Calculates the firelevel based on one equation instead of having to do this multiple times in different areas. var/firelevel = 0 - if(force || check_recombustability(liquid)) - if(isnull(total_fuel)) - for(var/g in gas) - if(gas_data.flags[g] & XGM_GAS_FUEL) - total_fuel += gas[g] - if(gas_data.flags[g] & XGM_GAS_OXIDIZER) - total_oxidizers += gas[g] - if(liquid) - total_fuel += liquid.amount - + if(force || check_recombustability(fuel_objs)) var/total_combustables = (total_fuel + total_oxidizers) if(total_combustables > 0) diff --git a/code/ZAS/Zone.dm b/code/ZAS/Zone.dm index 1f2cbee8..806db550 100644 --- a/code/ZAS/Zone.dm +++ b/code/ZAS/Zone.dm @@ -44,6 +44,7 @@ Class Procs: /zone/var/invalid = 0 /zone/var/list/contents = list() /zone/var/list/fire_tiles = list() +/zone/var/list/fuel_objs = list() /zone/var/needs_update = 0 @@ -72,8 +73,11 @@ Class Procs: T.zone = src contents.Add(T) if(T.fire) + var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T fire_tiles.Add(T) - air_master.active_fire_zones.Add(src) + air_master.active_fire_zones |= src + if (fuel) + fuel_objs += fuel T.update_graphic(air.graphic) /zone/proc/remove(turf/simulated/T) @@ -85,6 +89,9 @@ Class Procs: #endif contents.Remove(T) fire_tiles.Remove(T) + if (T.fire) + var/obj/effect/decal/cleanable/liquid_fuel/fuel = locate() in T + fuel_objs -= fuel T.zone = null T.update_graphic(graphic_remove = air.graphic) if(contents.len) @@ -142,7 +149,7 @@ Class Procs: M << name for(var/g in air.gas) M << "[gas_data.name[g]]: [air.gas[g]]" - M << "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]°K ([air.temperature - T0C]°C)" + M << "P: [air.return_pressure()] kPa V: [air.volume]L T: [air.temperature]�K ([air.temperature - T0C]�C)" M << "O2 per N2: [(air.gas["nitrogen"] ? air.gas["oxygen"]/air.gas["nitrogen"] : "N/A")] Moles: [air.total_moles]" M << "Simulated: [contents.len] ([air.group_multiplier])" //M << "Unsimulated: [unsimulated_contents.len]" @@ -162,4 +169,4 @@ Class Procs: M << "Space Edges: [space_edges] ([space_coefficient] connections)" //for(var/turf/T in unsimulated_contents) - // M << "[T] at ([T.x],[T.y])" \ No newline at end of file + // M << "[T] at ([T.x],[T.y])" diff --git a/code/ZAS/_gas_mixture_xgm.dm b/code/ZAS/_gas_mixture_xgm.dm index 8f30ca40..54921b93 100644 --- a/code/ZAS/_gas_mixture_xgm.dm +++ b/code/ZAS/_gas_mixture_xgm.dm @@ -100,7 +100,7 @@ /datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy) if (total_moles == 0) return 0 - + var/heat_capacity = heat_capacity() if (thermal_energy < 0) if (temperature < TCMB) @@ -121,7 +121,7 @@ /datum/gas_mixture/proc/specific_entropy() if (!gas.len || total_moles == 0) return SPECIFIC_ENTROPY_VACUUM - + . = 0 for(var/g in gas) . += gas[g] * specific_entropy_gas(g) @@ -129,24 +129,24 @@ /* It's arguable whether this should even be called entropy anymore. It's more "based on" entropy than actually entropy now. - + Returns the ideal gas specific entropy of a specific gas in the mix. This is the entropy due to that gas per mole of /that/ gas in the mixture, not the entropy due to that gas per mole of gas mixture. - + For the purposes of SS13, the specific entropy is just a number that tells you how hard it is to move gas. You can replace this with whatever you want. Just remember that returning a SMALL number == adding gas to this gas mix is HARD, taking gas away is EASY, and that returning a LARGE number means the opposite (so a vacuum should approach infinity). - So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way + So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures. */ /datum/gas_mixture/proc/specific_entropy_gas(var/gasid) if (!(gasid in gas) || gas[gasid] == 0) return SPECIFIC_ENTROPY_VACUUM //that gas isn't here - + //group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure) var/molar_mass = gas_data.molar_mass[gasid] var/specific_heat = gas_data.specific_heat[gasid] return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * temperature)) * (molar_mass*specific_heat*temperature)**(2/3) + 1 ) + 15 ) - + //alternative, simpler equation //var/partial_pressure = gas[gasid] * R_IDEAL_GAS_EQUATION * temperature / volume //return R_IDEAL_GAS_EQUATION * ( log (1 + IDEAL_GAS_ENTROPY_CONSTANT/partial_pressure) + 20 ) @@ -265,7 +265,7 @@ return 1 /datum/gas_mixture/proc/react(atom/dump_location) - zburn(null) + zburn(null, force_burn = 0, no_check = 0) //Rechecks the gas_mixture and adjusts the graphic list if needed. //Two lists can be passed by reference if you need know specifically which graphics were added and removed. diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 969d34e0..8ac7f2f4 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -193,9 +193,7 @@ update_flag else can_label = 0 - if(air_contents.temperature > PLASMA_FLASHPOINT) - air_contents.zburn() - return + air_contents.react() /obj/machinery/portable_atmospherics/canister/return_air() return air_contents diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm index f3faa7ed..61597be5 100644 --- a/code/game/objects/effects/decals/Cleanable/fuel.dm +++ b/code/game/objects/effects/decals/Cleanable/fuel.dm @@ -9,29 +9,39 @@ obj/effect/decal/cleanable/liquid_fuel New(newLoc,amt=1) src.amount = amt + var/has_spread = 0 //Be absorbed by any other liquid fuel in the tile. for(var/obj/effect/decal/cleanable/liquid_fuel/other in newLoc) if(other != src) other.amount += src.amount - spawn other.Spread() - del src + other.Spread() + has_spread = 1 + break - Spread() . = ..() + if (!has_spread) + Spread() + else + del(src) - proc/Spread() + proc/Spread(exclude = list()) //Allows liquid fuels to sometimes flow into other tiles. - if(amount < 5.0) return + if(amount < 15) return var/turf/simulated/S = loc if(!istype(S)) return for(var/d in cardinal) - if(rand(25)) - var/turf/simulated/target = get_step(src,d) - var/turf/simulated/origin = get_turf(src) - if(origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0)) - if(!locate(/obj/effect/decal/cleanable/liquid_fuel) in target) - new/obj/effect/decal/cleanable/liquid_fuel(target, amount*0.25) - amount *= 0.75 + var/turf/simulated/target = get_step(src, d) + var/turf/simulated/origin = get_turf(src) + if (origin.CanPass(null, target, 0, 0) && target.CanPass(null, origin, 0, 0)) + var/obj/effect/decal/cleanable/liquid_fuel/other_fuel = locate() in target + if (other_fuel) + other_fuel.amount += amount * 0.25 + if (!(other_fuel in exclude)) + exclude += src + other_fuel.Spread(exclude) + else + new/obj/effect/decal/cleanable/liquid_fuel(target, amount * 0.25, 1) + amount *= 0.75 flamethrower_fuel icon_state = "mustard" diff --git a/code/setup.dm b/code/setup.dm index da8bfac5..4fc51f38 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -135,6 +135,18 @@ #define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 20 #define PLASMA_OXYGEN_FULLBURN 10 +//For other fires +#define FIRE_REACTION_OXIDIZER_AMOUNT 3 +#define FIRE_REACTION_FUEL_AMOUNT 2 + +#define FIRE_GAS_BURNRATE_MULT 1 +#define FIRE_LIQUID_BURNRATE_MULT 0.5 + +#define LIQUIDFUEL_AMOUNT_TO_MOL 1 + +#define FIRE_GAS_MIN_BURNRATE 0.1 +#define FIRE_LIQUD_MIN_BURNRATE 0.05 + #define T0C 273.15 // 0degC #define T20C 293.15 // 20degC #define TCMB 2.7 // -270.3degC From cdc3283649e8c32e4e55ce7762b92df10e923fbe Mon Sep 17 00:00:00 2001 From: skull132 Date: Sun, 27 Dec 2015 13:47:54 +0200 Subject: [PATCH 05/26] Fixes the Forensics.dmi errors How did this suddenly stop working anyways? It shouldn't be a situational error :l --- code/modules/detectivework/forensics.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index 6bd1f103..251991b7 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -3,7 +3,7 @@ /obj/item/weapon/storage/box/swabs name = "box of swab kits" desc = "Sterilized equipment within. Do not contaminate." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "dnakit" storage_slots=14 can_hold = list("/obj/item/weapon/forensics/swab") @@ -29,7 +29,7 @@ /obj/item/weapon/forensics/swab name = "swab kit" desc = "A sterilized cotton swab and vial used to take forensic samples." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "swab" flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON w_class = 1.0 @@ -132,7 +132,7 @@ /obj/item/weapon/storage/briefcase/crimekit name = "Crime Scene Kit" desc = "A stainless steel-plated carrycase for all your forensic needs. Feels heavy." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "case" item_state = "case" storage_slots=14 @@ -156,7 +156,7 @@ /obj/item/weapon/forensics/slide name = "microscope slide" desc = "A pair of thin glass panes used in the examination of samples beneath a microscope." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "slide" flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON w_class = 1.0 @@ -219,7 +219,7 @@ /obj/machinery/microscope name = "high powered electron microscope" desc = "A highly advanced microscope capable of zooming up to 3000x." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "microscope" anchored = 1 var/obj/item/weapon/forensics/sample = null @@ -367,7 +367,7 @@ /obj/item/weapon/forensics/powder name = "fingerprint powder" desc = "A jar containing aluminum powder and a specialized brush." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "dust" var/list/complete_prints = list() var/stored = list() @@ -432,7 +432,7 @@ /obj/item/weapon/forensics/fiberkit name = "Fiber Collection Kit" desc = "A magnifying glass and tweezers. Used to lift suit fibers." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "m_glass" var/list/fibers_complete = list() var/stored = list() @@ -678,4 +678,4 @@ icon_state = "printer" var/printing = 0 density = 1 - anchored = 1 \ No newline at end of file + anchored = 1 From 4776d6daea0068fa34421e841ce18b9d89215a38 Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 30 Dec 2015 17:35:35 +0200 Subject: [PATCH 06/26] Whitelist Through SQL Adds a new configuration option: whitelists_on_sql. If enabled, it starts looking through the client's whitelist_status var to see if a person is whitelisted for heads of staff (always a bit value of 1), or an alien (values stored in the ss13_whitelist_statuses table). --- SQL/aurora_schema.sql | 23 +++++++++ SQL/feedback_schema.sql | 3 +- code/controllers/configuration.dm | 5 ++ code/game/jobs/whitelist.dm | 71 +++++++++++++++++++++------ code/modules/client/client defines.dm | 1 + code/modules/client/client procs.dm | 24 ++++----- 6 files changed, 96 insertions(+), 31 deletions(-) diff --git a/SQL/aurora_schema.sql b/SQL/aurora_schema.sql index b88f9105..a30eeb7a 100644 --- a/SQL/aurora_schema.sql +++ b/SQL/aurora_schema.sql @@ -134,3 +134,26 @@ CREATE TABLE `ss13_connection_log` ( `computerid` VARCHAR(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ------------------------------ +-- SQL based whitelist index +-- tgstation.ss13_whitelist_statuses +-- ------------------------------ +CREATE TABLE `ss13_whitelist_statuses` ( + `flag` INT(10) UNSIGNED NOT NULL, + `status_name` VARCHAR(32) NOT NULL, + PRIMARY KEY (`flag`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ------------------------------ +-- SQL based whitelist modification log +-- tgstation.ss13_whitelist_log +-- ------------------------------ +CREATE TABLE `ss13_whitelist_log` ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `datetime` DATETIME NOT NULL, + `user` VARCHAR(32) NOT NULL, + `action_method` VARCHAR(32) NOT NULL DEFAULT 'Game Server', + `action` VARCHAR(32) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/SQL/feedback_schema.sql b/SQL/feedback_schema.sql index bb2baf83..4208a579 100644 --- a/SQL/feedback_schema.sql +++ b/SQL/feedback_schema.sql @@ -61,6 +61,7 @@ CREATE TABLE `ss13_player` ( `ip` varchar(18) NOT NULL, `computerid` varchar(32) NOT NULL, `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', + `whitelist_status` INT(11) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; @@ -117,4 +118,4 @@ CREATE TABLE `ss13_privacy` ( `ckey` varchar(32) NOT NULL, `option` varchar(128) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; \ No newline at end of file +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 4080c325..1a60f756 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -88,6 +88,8 @@ var/aurorawikiurl var/githuburl + var/whitelists_on_sql = 0 //Changes how whitelists are handled. SQL connection required to run this! + //Alert level description var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." @@ -528,6 +530,9 @@ if("topic_safe_address") topic_safe_address = value + if ("whitelists_on_sql") + config.whitelists_on_sql = 1 + else log_misc("Unknown setting in configuration: '[name]'") diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index f9bb469f..599517ce 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -3,18 +3,36 @@ var/list/whitelist = list() /hook/startup/proc/loadWhitelist() - if(config.usewhitelist) + if (config.usewhitelist) load_whitelist() return 1 /proc/load_whitelist() - whitelist = file2list(WHITELISTFILE) - if(!whitelist.len) whitelist = null + if (config.whitelists_on_sql) + establish_db_connection() + + if (!dbcon.IsConnected()) + //Continue with the old code if it fails. Stop and return if it succeeds. + log_misc("Database connection failed. Reverting to legacy system.") + config.whitelists_on_sql = 0 + else + return + + whitelist = file2list(WHITELISTFILE) + if (!whitelist.len) + whitelist = null + +/proc/check_whitelist(mob/M) + if (config.whitelists_on_sql) + var/head_of_staff_whitelist = 1 + if (M.client && M.client.whitelist_status) + return (M.client.whitelist_status & head_of_staff_whitelist) -/proc/check_whitelist(mob/M /*, var/rank*/) - if(!whitelist) return 0 - return ("[M.ckey]" in whitelist) + else + if (!whitelist) + return 0 + return ("[M.ckey]" in whitelist) /var/list/alien_whitelist = list() @@ -24,6 +42,22 @@ var/list/whitelist = list() return 1 /proc/load_alienwhitelist() + if (config.whitelists_on_sql) + establish_db_connection() + + if (!dbcon.IsConnected()) + log_misc("Database connection failed. Reverting to legacy system.") + config.whitelists_on_sql = 0 + else + var/DBQuery/query = dbcon.NewQuery("SELECT status_name, flag FROM ss13_whitelist_statuses") + query.Execute() + + for (query.NextRow()) + if (query.item[1] in whitelisted_species) + whitelisted_species[query.item[1]] = text2num(query.item[2]) + + return + var/text = file2text("config/alienwhitelist.txt") if (!text) log_misc("Failed to load config/alienwhitelist.txt") @@ -32,19 +66,26 @@ var/list/whitelist = list() //todo: admin aliens /proc/is_alien_whitelisted(mob/M, var/species) - if(!config.usealienwhitelist) + if (!config.usealienwhitelist) return 1 - if(species == "human" || species == "Human") - return 1 -// if(check_rights(R_ADMIN, 0)) -// return 1 - if(!alien_whitelist) + + if (!M || !species) return 0 - if(M && species) + + if (species == "human" || species == "Human") + return 1 + + if (config.whitelists_on_sql) + if (M.client && M.client.whitelist_status) + return (M.client.whitelist_status & whitelisted_species[species]) + + else + if (!alien_whitelist) + return 0 for (var/s in alien_whitelist) - if(findtext(s,"[M.ckey] - [species]")) + if (findtext(s, "[M.ckey] - [species]")) return 1 - if(findtext(s,"[M.ckey] - All")) + if (findtext(s, "[M.ckey] - All")) return 1 return 0 diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index cdd394f4..f026c743 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,5 +46,6 @@ var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id + var/whitelist_status = 0 //Used to determine what whitelists the player has access to. Bitflag field. preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index f461943b..135262c9 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -225,15 +225,14 @@ if(!dbcon.IsConnected()) return - var/sql_ckey = sql_sanitize_text(src.ckey) - - var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM ss13_player WHERE ckey = '[sql_ckey]'") - query.Execute() + var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age, whitelist_status FROM ss13_player WHERE ckey = :ckey") + query.Execute(list(":ckey" = ckey)) var/sql_id = 0 player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record. while(query.NextRow()) sql_id = query.item[1] player_age = text2num(query.item[2]) + whitelist_status = text2num(query.item[3]) break var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM ss13_player WHERE ip = '[address]'") @@ -261,24 +260,19 @@ if(src.holder) admin_rank = src.holder.rank - var/sql_ip = sql_sanitize_text(src.address) - var/sql_computerid = sql_sanitize_text(src.computer_id) - var/sql_admin_rank = sql_sanitize_text(admin_rank) - - if(sql_id) //Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables - var/DBQuery/query_update = dbcon.NewQuery("UPDATE ss13_player SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]") - query_update.Execute() + var/DBQuery/query_update = dbcon.NewQuery("UPDATE ss13_player SET lastseen = Now(), ip = :ip, computerid = :computer_id, lastadminrank = :admin_rank WHERE id = :id") + query_update.Execute(list(":ip" = address, ":computer_id" = computer_id, ":admin_rank" = admin_rank, ":id" = sql_id)) else //New player!! Need to insert all the stuff - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')") - query_insert.Execute() + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, :ckey, Now(), Now(), :ip, :computer_id, :admin_rank)") + query_insert.Execute(list(":ckey" = ckey, ":ip" = address, ":computer_id" = computer_id, ":admin_rank" = admin_rank)) //Logging player access var/serverip = "[world.internet_address]:[world.port]" - var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `ss13_connection_log`(`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');") - query_accesslog.Execute() + var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `ss13_connection_log`(`id`, `datetime`, `serverip`, `ckey`, `ip`, `computerid`) VALUES(null, Now(), :server_ip, :ckey, :ip, :computer_id);") + query_accesslog.Execute(list(":server_ip" = serverip, ":ckey" = ckey, ":ip" = address, ":computer_id" = computer_id)) #undef TOPIC_SPAM_DELAY From 2c07141d604c817b03758fdf8bb29fe5b606eaf4 Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 30 Dec 2015 17:43:25 +0200 Subject: [PATCH 07/26] Revert "Database updates" --- SQL/aurora_schema.sql | 37 ----- SQL/feedback_schema.sql | 3 +- code/controllers/configuration.dm | 5 - code/defines/procs/dbcore.dm | 200 +++++++++----------------- code/game/jobs/whitelist.dm | 69 ++------- code/modules/client/client defines.dm | 1 - code/modules/client/client procs.dm | 24 ++-- 7 files changed, 95 insertions(+), 244 deletions(-) diff --git a/SQL/aurora_schema.sql b/SQL/aurora_schema.sql index a30eeb7a..c33433bd 100644 --- a/SQL/aurora_schema.sql +++ b/SQL/aurora_schema.sql @@ -120,40 +120,3 @@ CREATE TABLE `ss13_santa` ( `gift_assigned` varchar(255) DEFAULT NULL, PRIMARY KEY (`character_name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- ------------------------------ --- SQL based connection log --- tgstation.ss13_connection_log --- ------------------------------ -CREATE TABLE `ss13_connection_log` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `datetime` DATETIME NOT NULL, - `serverip` VARCHAR(32) NOT NULL, - `ckey` VARCHAR(32) NOT NULL, - `ip` VARCHAR(32) NOT NULL, - `computerid` VARCHAR(32) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- ------------------------------ --- SQL based whitelist index --- tgstation.ss13_whitelist_statuses --- ------------------------------ -CREATE TABLE `ss13_whitelist_statuses` ( - `flag` INT(10) UNSIGNED NOT NULL, - `status_name` VARCHAR(32) NOT NULL, - PRIMARY KEY (`flag`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; - --- ------------------------------ --- SQL based whitelist modification log --- tgstation.ss13_whitelist_log --- ------------------------------ -CREATE TABLE `ss13_whitelist_log` ( - `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, - `datetime` DATETIME NOT NULL, - `user` VARCHAR(32) NOT NULL, - `action_method` VARCHAR(32) NOT NULL DEFAULT 'Game Server', - `action` VARCHAR(32) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1; diff --git a/SQL/feedback_schema.sql b/SQL/feedback_schema.sql index 4208a579..bb2baf83 100644 --- a/SQL/feedback_schema.sql +++ b/SQL/feedback_schema.sql @@ -61,7 +61,6 @@ CREATE TABLE `ss13_player` ( `ip` varchar(18) NOT NULL, `computerid` varchar(32) NOT NULL, `lastadminrank` varchar(32) NOT NULL DEFAULT 'Player', - `whitelist_status` INT(11) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; @@ -118,4 +117,4 @@ CREATE TABLE `ss13_privacy` ( `ckey` varchar(32) NOT NULL, `option` varchar(128) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; +) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 1a60f756..4080c325 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -88,8 +88,6 @@ var/aurorawikiurl var/githuburl - var/whitelists_on_sql = 0 //Changes how whitelists are handled. SQL connection required to run this! - //Alert level description var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." @@ -530,9 +528,6 @@ if("topic_safe_address") topic_safe_address = value - if ("whitelists_on_sql") - config.whitelists_on_sql = 1 - else log_misc("Unknown setting in configuration: '[name]'") diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm index af387497..ddc7191e 100644 --- a/code/defines/procs/dbcore.dm +++ b/code/defines/procs/dbcore.dm @@ -48,45 +48,45 @@ DBConnection var/server = "" var/port = 3306 -DBConnection/New(dbi_handler, username, password_handler, cursor_handler) - dbi = dbi_handler - user = username - password = password_handler - default_cursor = cursor_handler +DBConnection/New(dbi_handler,username,password_handler,cursor_handler) + src.dbi = dbi_handler + src.user = username + src.password = password_handler + src.default_cursor = cursor_handler _db_con = _dm_db_new_con() -DBConnection/proc/Connect(dbi_handler = dbi, user_handler = user, password_handler = password, cursor_handler) - if (!sqllogging) - return 0 - if (!src) - return 0 - cursor_handler = default_cursor - if (!cursor_handler) - cursor_handler = Default_Cursor - return _dm_db_connect(_db_con,dbi_handler, user_handler, password_handler, cursor_handler, null) - -DBConnection/proc/Disconnect() - return _dm_db_close(_db_con) - -DBConnection/proc/IsConnected() +DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) if(!sqllogging) return 0 + if(!src) return 0 + cursor_handler = src.default_cursor + if(!cursor_handler) cursor_handler = Default_Cursor + return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null) + +DBConnection/proc/Disconnect() return _dm_db_close(_db_con) + +DBConnection/proc/IsConnected() + if(!sqllogging) return 0 var/success = _dm_db_is_connected(_db_con) return success -DBConnection/proc/Quote(str) - return _dm_db_quote(_db_con,str) - -DBConnection/proc/ErrorMsg() - return _dm_db_error_msg(_db_con) +DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str) +DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con) DBConnection/proc/SelectDB(database_name,dbi) if(IsConnected()) Disconnect() //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) - return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]", user, password) + return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password) +DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler) + + +DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler) + if(sql_query) src.sql = sql_query + if(connection_handler) src.db_connection = connection_handler + if(cursor_handler) src.default_cursor = cursor_handler + _db_query = _dm_db_new_query() + return ..() -DBConnection/proc/NewQuery(sql_query, cursor_handler = default_cursor) - return new/DBQuery(sql_query, src, cursor_handler) DBQuery var/sql // The sql query being executed. @@ -98,53 +98,34 @@ DBQuery var/DBConnection/db_connection var/_db_query -DBQuery/New(var/sql_query, var/DBConnection/connection_handler, var/cursor_handler) - if (sql_query) - sql = sql_query - if (connection_handler) - db_connection = connection_handler - if (cursor_handler) - default_cursor = cursor_handler - _db_query = _dm_db_new_query() - return ..() +DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler -DBQuery/proc/Connect(DBConnection/connection_handler) - db_connection = connection_handler - -DBQuery/proc/Execute(var/list/argumentList = null, var/passNotFound = 0, sql_query = sql, cursor_handler = default_cursor) +DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) Close() + return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) - if (argumentList) - parseArguments(argumentList, passNotFound) +DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) - return _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null) +DBQuery/proc/RowsAffected() return _dm_db_rows_affected(_db_query) -DBQuery/proc/NextRow() - return _dm_db_next_row(_db_query,item,conversions) +DBQuery/proc/RowCount() return _dm_db_row_count(_db_query) -DBQuery/proc/RowsAffected() - return _dm_db_rows_affected(_db_query) - -DBQuery/proc/RowCount() - return _dm_db_row_count(_db_query) - -DBQuery/proc/ErrorMsg() - return _dm_db_error_msg(_db_query) +DBQuery/proc/ErrorMsg() return _dm_db_error_msg(_db_query) DBQuery/proc/Columns() - if (!columns) + if(!columns) columns = _dm_db_columns(_db_query,/DBColumn) return columns DBQuery/proc/GetRowData() var/list/columns = Columns() var/list/results - if (columns.len) + if(columns.len) results = list() - for (var/C in columns) - results += C + for(var/C in columns) + results+=C var/DBColumn/cur_col = columns[C] - results[C] = item[(cur_col.position+1)] + results[C] = src.item[(cur_col.position+1)] return results DBQuery/proc/Close() @@ -157,49 +138,11 @@ DBQuery/proc/Quote(str) return db_connection.Quote(str) DBQuery/proc/SetConversion(column,conversion) - if (istext(column)) - column = columns.Find(column) - if (!conversions) - conversions = new/list(column) - else if (conversions.len < column) - conversions.len = column + if(istext(column)) column = columns.Find(column) + if(!conversions) conversions = new/list(column) + else if(conversions.len < column) conversions.len = column conversions[column] = conversion -/* Works similarly to the PDO object's Execute() method in PHP. -* Insert a list of keys/values, it searches the SQL syntax for the keys, -* and replaces them with sanitized versions of the values. -* Can be called independently, or through dbcon.Execute(), where the list would be the first argument. -* passNotFound controls whether or not is passes keys not found in the SQL query. -* Keys are /case-sensitive/, be careful! -* Returns FALSE upon failure, TRUE otherwise, so it can be used in checks and so on. -* - Skull132 -*/ -DBQuery/proc/parseArguments(var/list/argumentList, var/passNotFound = 0) - if (!sql || !argumentList || !argumentList.len) - return 0 - - for (var/placeholder in argumentList) - if (!findtextEx(sql, placeholder)) - if (passNotFound) - continue - else - return 0 - - var/argument = argumentList[placeholder] - - if (isnull(argument)) - argument = "NULL" - else if (istext(argument)) - argument = dbcon.Quote(argument) - else if (isnum(argument)) - argument = "'[argument]'" - else - return 0 - - sql = replacetextEx(sql, placeholder, argument) - - return 1 - DBColumn var/name @@ -210,45 +153,32 @@ DBColumn var/length var/max_length -DBColumn/New(name_handler, table_handler, position_handler, type_handler, flag_handler, length_handler, max_length_handler) - name = name_handler - table = table_handler - position = position_handler - sql_type = type_handler - flags = flag_handler - length = length_handler - max_length = max_length_handler +DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler) + src.name = name_handler + src.table = table_handler + src.position = position_handler + src.sql_type = type_handler + src.flags = flag_handler + src.length = length_handler + src.max_length = max_length_handler return ..() -DBColumn/proc/SqlTypeName(type_handler = sql_type) - switch (type_handler) - if (TINYINT) - return "TINYINT" - if (SMALLINT) - return "SMALLINT" - if (MEDIUMINT) - return "MEDIUMINT" - if (INTEGER) - return "INTEGER" - if (BIGINT) - return "BIGINT" - if (FLOAT) - return "FLOAT" - if (DOUBLE) - return "DOUBLE" - if (DATE) - return "DATE" - if (DATETIME) - return "DATETIME" - if (TIMESTAMP) - return "TIMESTAMP" - if (TIME) - return "TIME" - if (STRING) - return "STRING" - if (BLOB) - return "BLOB" +DBColumn/proc/SqlTypeName(type_handler=src.sql_type) + switch(type_handler) + if(TINYINT) return "TINYINT" + if(SMALLINT) return "SMALLINT" + if(MEDIUMINT) return "MEDIUMINT" + if(INTEGER) return "INTEGER" + if(BIGINT) return "BIGINT" + if(FLOAT) return "FLOAT" + if(DOUBLE) return "DOUBLE" + if(DATE) return "DATE" + if(DATETIME) return "DATETIME" + if(TIMESTAMP) return "TIMESTAMP" + if(TIME) return "TIME" + if(STRING) return "STRING" + if(BLOB) return "BLOB" #undef Default_Cursor diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 599517ce..f9bb469f 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -3,36 +3,18 @@ var/list/whitelist = list() /hook/startup/proc/loadWhitelist() - if (config.usewhitelist) + if(config.usewhitelist) load_whitelist() return 1 /proc/load_whitelist() - if (config.whitelists_on_sql) - establish_db_connection() - - if (!dbcon.IsConnected()) - //Continue with the old code if it fails. Stop and return if it succeeds. - log_misc("Database connection failed. Reverting to legacy system.") - config.whitelists_on_sql = 0 - else - return - whitelist = file2list(WHITELISTFILE) - if (!whitelist.len) - whitelist = null - -/proc/check_whitelist(mob/M) - if (config.whitelists_on_sql) - var/head_of_staff_whitelist = 1 - if (M.client && M.client.whitelist_status) - return (M.client.whitelist_status & head_of_staff_whitelist) + if(!whitelist.len) whitelist = null +/proc/check_whitelist(mob/M /*, var/rank*/) + if(!whitelist) return 0 - else - if (!whitelist) - return 0 - return ("[M.ckey]" in whitelist) + return ("[M.ckey]" in whitelist) /var/list/alien_whitelist = list() @@ -42,22 +24,6 @@ var/list/whitelist = list() return 1 /proc/load_alienwhitelist() - if (config.whitelists_on_sql) - establish_db_connection() - - if (!dbcon.IsConnected()) - log_misc("Database connection failed. Reverting to legacy system.") - config.whitelists_on_sql = 0 - else - var/DBQuery/query = dbcon.NewQuery("SELECT status_name, flag FROM ss13_whitelist_statuses") - query.Execute() - - for (query.NextRow()) - if (query.item[1] in whitelisted_species) - whitelisted_species[query.item[1]] = text2num(query.item[2]) - - return - var/text = file2text("config/alienwhitelist.txt") if (!text) log_misc("Failed to load config/alienwhitelist.txt") @@ -66,26 +32,19 @@ var/list/whitelist = list() //todo: admin aliens /proc/is_alien_whitelisted(mob/M, var/species) - if (!config.usealienwhitelist) + if(!config.usealienwhitelist) return 1 - - if (!M || !species) + if(species == "human" || species == "Human") + return 1 +// if(check_rights(R_ADMIN, 0)) +// return 1 + if(!alien_whitelist) return 0 - - if (species == "human" || species == "Human") - return 1 - - if (config.whitelists_on_sql) - if (M.client && M.client.whitelist_status) - return (M.client.whitelist_status & whitelisted_species[species]) - - else - if (!alien_whitelist) - return 0 + if(M && species) for (var/s in alien_whitelist) - if (findtext(s, "[M.ckey] - [species]")) + if(findtext(s,"[M.ckey] - [species]")) return 1 - if (findtext(s, "[M.ckey] - All")) + if(findtext(s,"[M.ckey] - All")) return 1 return 0 diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index f026c743..cdd394f4 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,6 +46,5 @@ var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id - var/whitelist_status = 0 //Used to determine what whitelists the player has access to. Bitflag field. preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 135262c9..f461943b 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -225,14 +225,15 @@ if(!dbcon.IsConnected()) return - var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age, whitelist_status FROM ss13_player WHERE ckey = :ckey") - query.Execute(list(":ckey" = ckey)) + var/sql_ckey = sql_sanitize_text(src.ckey) + + var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM ss13_player WHERE ckey = '[sql_ckey]'") + query.Execute() var/sql_id = 0 player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record. while(query.NextRow()) sql_id = query.item[1] player_age = text2num(query.item[2]) - whitelist_status = text2num(query.item[3]) break var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM ss13_player WHERE ip = '[address]'") @@ -260,19 +261,24 @@ if(src.holder) admin_rank = src.holder.rank + var/sql_ip = sql_sanitize_text(src.address) + var/sql_computerid = sql_sanitize_text(src.computer_id) + var/sql_admin_rank = sql_sanitize_text(admin_rank) + + if(sql_id) //Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables - var/DBQuery/query_update = dbcon.NewQuery("UPDATE ss13_player SET lastseen = Now(), ip = :ip, computerid = :computer_id, lastadminrank = :admin_rank WHERE id = :id") - query_update.Execute(list(":ip" = address, ":computer_id" = computer_id, ":admin_rank" = admin_rank, ":id" = sql_id)) + var/DBQuery/query_update = dbcon.NewQuery("UPDATE ss13_player SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]") + query_update.Execute() else //New player!! Need to insert all the stuff - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, :ckey, Now(), Now(), :ip, :computer_id, :admin_rank)") - query_insert.Execute(list(":ckey" = ckey, ":ip" = address, ":computer_id" = computer_id, ":admin_rank" = admin_rank)) + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')") + query_insert.Execute() //Logging player access var/serverip = "[world.internet_address]:[world.port]" - var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `ss13_connection_log`(`id`, `datetime`, `serverip`, `ckey`, `ip`, `computerid`) VALUES(null, Now(), :server_ip, :ckey, :ip, :computer_id);") - query_accesslog.Execute(list(":server_ip" = serverip, ":ckey" = ckey, ":ip" = address, ":computer_id" = computer_id)) + var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `ss13_connection_log`(`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');") + query_accesslog.Execute() #undef TOPIC_SPAM_DELAY From e0611edac39358255669a696ae60f945e58fef81 Mon Sep 17 00:00:00 2001 From: Michael Abbey Date: Wed, 30 Dec 2015 11:55:53 -0500 Subject: [PATCH 08/26] Fixes Airlocks losing pressure (Baystation Fix) And fixes the icon pathing -Allows your code to be easily used by fixing the forensics icon pathing. -Ports a fix from Baystation's 12 Developer atlantiscze (As well as testing done by Dennok on BS12 and Mango and Myself for testing on Aurora Code) --- .../components/binary_devices/dp_vent_pump.dm | 4 +- .../components/unary/vent_pump.dm | 49 +++++------- .../embedded_controller/airlock_program.dm | 79 +++++++++---------- code/modules/detectivework/forensics.dm | 14 ++-- 4 files changed, 65 insertions(+), 81 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index f74d2285..fe0f0308 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -120,14 +120,14 @@ if(pressure_delta > 0.5) if(pump_direction) //internal -> external if (node1 && (environment.temperature || air1.temperature)) - var/transfer_moles = calculate_transfer_moles(air1, environment) + var/transfer_moles = calculate_transfer_moles(air1, environment, pressure_delta) power_draw = pump_gas(src, air1, environment, transfer_moles, power_rating) if(power_draw >= 0 && network1) network1.update = 1 else //external -> internal if (node2 && (environment.temperature || air2.temperature)) - var/transfer_moles = calculate_transfer_moles(environment, air2, (network2)? network2.volume : 0) + var/transfer_moles = calculate_transfer_moles(environment, air2, pressure_delta, (network2)? network2.volume : 0) //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 9f1b492e..ecb2eebe 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -26,6 +26,7 @@ var/area_uid var/id_tag = null + var/hibernate = 0 //Do we even process? var/pump_direction = 1 //0 = siphoning, 1 = releasing var/external_pressure_bound = EXTERNAL_PRESSURE_BOUND @@ -88,7 +89,7 @@ /obj/machinery/atmospherics/unary/vent_pump/engine name = "Engine Core Vent" power_channel = ENVIRON - power_rating = 15000 //15 kW ~ 20 HP + power_rating = 30000 //15 kW ~ 20 HP /obj/machinery/atmospherics/unary/vent_pump/engine/New() ..() @@ -150,8 +151,8 @@ /obj/machinery/atmospherics/unary/vent_pump/process() ..() - last_power_draw = 0 - last_flow_rate = 0 + if (hibernate) + return 1 if (!node) use_power = 0 @@ -168,15 +169,26 @@ if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) if(pump_direction) //internal -> external - var/transfer_moles = calculate_transfer_moles(air_contents, environment) + var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) else //external -> internal - var/transfer_moles = calculate_transfer_moles(environment, air_contents, (network)? network.volume : 0) + var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here power_draw = pump_gas(src, environment, air_contents, transfer_moles, power_rating) + else + //If we're in an area that is fucking ideal, and we don't have to do anything, chances are we won't next tick either so why redo these calculations? + //JESUS FUCK. THERE ARE LITERALLY 250 OF YOU MOTHERFUCKERS ON ZLEVEL ONE AND YOU DO THIS SHIT EVERY TICK WHEN VERY OFTEN THERE IS NO REASON TO + + if(pump_direction && pressure_checks == PRESSURE_CHECK_EXTERNAL && controller_iteration > 10) //99% of all vents + //Fucking hibernate because you ain't doing shit. + hibernate = 1 + spawn(rand(100,200)) //hibernate for 10 or 20 seconds randomly + hibernate = 0 + + if (power_draw >= 0) last_power_draw = power_draw use_power(power_draw) @@ -238,54 +250,41 @@ initial_loc.air_vent_names[id_tag] = new_name src.name = new_name initial_loc.air_vent_info[id_tag] = signal.data - radio_connection.post_signal(src, signal, radio_filter_out) - return 1 - - /obj/machinery/atmospherics/unary/vent_pump/initialize() ..() - //some vents work his own spesial way radio_filter_in = frequency==1439?(RADIO_FROM_AIRALARM):null radio_filter_out = frequency==1439?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) - /obj/machinery/atmospherics/unary/vent_pump/receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) return + hibernate = 0 //log_admin("DEBUG \[[world.timeofday]\]: /obj/machinery/atmospherics/unary/vent_pump/receive_signal([signal.debug_print()])") if(!signal.data["tag"] || (signal.data["tag"] != id_tag) || (signal.data["sigtype"]!="command")) return 0 - if(signal.data["purge"] != null) pressure_checks &= ~1 pump_direction = 0 - if(signal.data["stabalize"] != null) pressure_checks |= 1 pump_direction = 1 - if(signal.data["power"] != null) use_power = text2num(signal.data["power"]) - if(signal.data["power_toggle"] != null) use_power = !use_power - if(signal.data["checks"] != null) if (signal.data["checks"] == "default") pressure_checks = pressure_checks_default else pressure_checks = text2num(signal.data["checks"]) - if(signal.data["checks_toggle"] != null) pressure_checks = (pressure_checks?0:3) - if(signal.data["direction"] != null) pump_direction = text2num(signal.data["direction"]) - if(signal.data["set_internal_pressure"] != null) if (signal.data["set_internal_pressure"] == "default") internal_pressure_bound = internal_pressure_bound_default @@ -295,7 +294,6 @@ text2num(signal.data["set_internal_pressure"]), ONE_ATMOSPHERE*50 ) - if(signal.data["set_external_pressure"] != null) if (signal.data["set_external_pressure"] == "default") external_pressure_bound = external_pressure_bound_default @@ -305,32 +303,25 @@ text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50 ) - if(signal.data["adjust_internal_pressure"] != null) internal_pressure_bound = between( 0, internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), ONE_ATMOSPHERE*50 ) - if(signal.data["adjust_external_pressure"] != null) - - external_pressure_bound = between( 0, external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), ONE_ATMOSPHERE*50 ) - if(signal.data["init"] != null) name = signal.data["init"] return - if(signal.data["status"] != null) spawn(2) broadcast_status() return //do not update_icon - //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") spawn(2) broadcast_status() @@ -368,13 +359,11 @@ user << "You are too far away to read the gauge." if(welded) user << "It seems welded shut." - /obj/machinery/atmospherics/unary/vent_pump/power_change() var/old_stat = stat ..() if(old_stat != stat) update_icon() - /obj/machinery/atmospherics/unary/vent_pump/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (!istype(W, /obj/item/weapon/wrench)) return ..() @@ -400,14 +389,12 @@ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) del(src) - /obj/machinery/atmospherics/unary/vent_pump/Del() if(initial_loc) initial_loc.air_vent_info -= id_tag initial_loc.air_vent_names -= id_tag ..() return - /* Alt-click to vent crawl - Monkeys, aliens, slimes and mice. This is a little buggy but somehow that just seems to plague ventcrawl. diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 8cb3abb9..f85f09a5 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -22,6 +22,8 @@ var/state = STATE_IDLE var/target_state = TARGET_NONE + var/waiting_ticks = 0 + var/waiting_ticks_target = 2 // By default, we wait for two ticks before actually signalling the pump to do it's thing. This is to ensure ZAS registers the doors have closed, and we don't leak air. /datum/computer/file/embedded_program/airlock/New(var/obj/machinery/embedded_controller/M) ..(M) @@ -109,10 +111,14 @@ var/shutdown_pump = 0 switch(command) if("cycle_ext") - begin_cycle_out() + //only respond to these commands if the airlock isn't already doing something + //prevents the controller from getting confused and doing strange things + if(state == target_state) + begin_cycle_out() if("cycle_int") - begin_cycle_in() + if(state == target_state) + begin_cycle_in() if("cycle_ext_door") cycleDoors(TARGET_OUTOPEN) @@ -122,14 +128,6 @@ if("abort") stop_cycling() - /* - //dont do this. If the airlock can't get enough air to pressurize the person inside is stuck - state = STATE_PRESSURIZE - target_state = TARGET_NONE - memory["target_pressure"] = ONE_ATMOSPHERE - signalPump(tag_airpump, 1, 1, memory["target_pressure"]) - process() - */ if("force_ext") toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "toggle") @@ -140,11 +138,9 @@ if("purge") memory["purge"] = !memory["purge"] if(memory["purge"]) - toggleDoor(memory["exterior_status"], tag_exterior_door, 1, "close") - toggleDoor(memory["interior_status"], tag_interior_door, 1, "close") - state = STATE_DEPRESSURIZE + close_doors() + state = STATE_PREPARE target_state = TARGET_NONE - signalPump(tag_airpump, 1, 0, 0) if("secure") memory["secure"] = !memory["secure"] @@ -184,16 +180,21 @@ switch(state) if(STATE_PREPARE) if (check_doors_secured()) + if(waiting_ticks < waiting_ticks_target) + waiting_ticks++ + return + else + waiting_ticks = 0 var/chamber_pressure = memory["chamber_sensor_pressure"] var/target_pressure = memory["target_pressure"] if(memory["purge"]) + //purge apparently means clearing the airlock chamber to vacuum (then refilling, handled later) target_pressure = 0 + state = STATE_DEPRESSURIZE + signalPump(tag_airpump, 1, 0, 0) //send a signal to start depressurizing - if(memory["purge"]) - target_pressure = 0 - - if(chamber_pressure <= target_pressure) + else if(chamber_pressure <= target_pressure) state = STATE_PRESSURIZE signalPump(tag_airpump, 1, 1, target_pressure) //send a signal to start pressurizing @@ -201,40 +202,37 @@ state = STATE_DEPRESSURIZE signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing - //Check for vacuum - this is set after the pumps so the pumps are aiming for 0 - if(!memory["target_pressure"]) - memory["target_pressure"] = ONE_ATMOSPHERE * 0.05 + //Make sure the airlock isn't aiming for pure vacuum - an impossibility + memory["target_pressure"] = max(target_pressure, ONE_ATMOSPHERE * 0.05) if(STATE_PRESSURIZE) if(memory["chamber_sensor_pressure"] >= memory["target_pressure"] * 0.95) - cycleDoors(target_state) - - state = STATE_IDLE - target_state = TARGET_NONE - + //not done until the pump has reported that it's off if(memory["pump_status"] != "off") signalPump(tag_airpump, 0) //send a signal to stop pumping + else + cycleDoors(target_state) + state = STATE_IDLE + target_state = TARGET_NONE if(STATE_DEPRESSURIZE) - if(memory["purge"]) - if(memory["chamber_sensor_pressure"] <= ONE_ATMOSPHERE * 0.05) - state = STATE_PRESSURIZE - signalPump(tag_airpump, 1, 1, memory["target_pressure"]) + if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05) + if(memory["purge"]) + memory["purge"] = 0 + memory["target_pressure"] = memory["internal_sensor_pressure"] + state = STATE_PREPARE + target_state = TARGET_NONE - - else if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05) - cycleDoors(target_state) - - state = STATE_IDLE - target_state = TARGET_NONE - - //send a signal to stop pumping - if(memory["pump_status"] != "off") + else if(memory["pump_status"] != "off") signalPump(tag_airpump, 0) + else + cycleDoors(target_state) + state = STATE_IDLE + target_state = TARGET_NONE - memory["processing"] = state != target_state + memory["processing"] = (state != target_state) return 1 @@ -321,7 +319,6 @@ datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(var/command /*---------------------------------------------------------- toggleDoor() - Sends a radio command to a door to either open or close. If the command is 'toggle' the door will be sent a command that reverses it's current state. diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index 6bd1f103..52ac4436 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -3,7 +3,7 @@ /obj/item/weapon/storage/box/swabs name = "box of swab kits" desc = "Sterilized equipment within. Do not contaminate." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "dnakit" storage_slots=14 can_hold = list("/obj/item/weapon/forensics/swab") @@ -29,7 +29,7 @@ /obj/item/weapon/forensics/swab name = "swab kit" desc = "A sterilized cotton swab and vial used to take forensic samples." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "swab" flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON w_class = 1.0 @@ -132,7 +132,7 @@ /obj/item/weapon/storage/briefcase/crimekit name = "Crime Scene Kit" desc = "A stainless steel-plated carrycase for all your forensic needs. Feels heavy." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "case" item_state = "case" storage_slots=14 @@ -156,7 +156,7 @@ /obj/item/weapon/forensics/slide name = "microscope slide" desc = "A pair of thin glass panes used in the examination of samples beneath a microscope." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "slide" flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON w_class = 1.0 @@ -219,7 +219,7 @@ /obj/machinery/microscope name = "high powered electron microscope" desc = "A highly advanced microscope capable of zooming up to 3000x." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "microscope" anchored = 1 var/obj/item/weapon/forensics/sample = null @@ -367,7 +367,7 @@ /obj/item/weapon/forensics/powder name = "fingerprint powder" desc = "A jar containing aluminum powder and a specialized brush." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "dust" var/list/complete_prints = list() var/stored = list() @@ -432,7 +432,7 @@ /obj/item/weapon/forensics/fiberkit name = "Fiber Collection Kit" desc = "A magnifying glass and tweezers. Used to lift suit fibers." - icon = 'forensics.dmi' + icon = 'icons/obj/forensics.dmi' icon_state = "m_glass" var/list/fibers_complete = list() var/stored = list() From 6f0ecfbd6488701b5624e85329c7d67c4dfccad0 Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 30 Dec 2015 19:11:38 +0200 Subject: [PATCH 09/26] Database Updates - Round 2 Because I fucked up the Git processes. Adds: * Variable and automatic sanitization to SQL queries (read up on dbcore.dm) * Whitelist handling through SQL --- code/controllers/configuration.dm | 5 + code/defines/procs/dbcore.dm | 196 +++++++++++++++++--------- code/game/jobs/whitelist.dm | 71 ++++++++-- code/modules/client/client defines.dm | 1 + code/modules/client/client procs.dm | 24 ++-- 5 files changed, 204 insertions(+), 93 deletions(-) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 4080c325..1a60f756 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -88,6 +88,8 @@ var/aurorawikiurl var/githuburl + var/whitelists_on_sql = 0 //Changes how whitelists are handled. SQL connection required to run this! + //Alert level description var/alert_desc_green = "All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced." var/alert_desc_blue_upto = "The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted." @@ -528,6 +530,9 @@ if("topic_safe_address") topic_safe_address = value + if ("whitelists_on_sql") + config.whitelists_on_sql = 1 + else log_misc("Unknown setting in configuration: '[name]'") diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm index ddc7191e..af387497 100644 --- a/code/defines/procs/dbcore.dm +++ b/code/defines/procs/dbcore.dm @@ -48,45 +48,45 @@ DBConnection var/server = "" var/port = 3306 -DBConnection/New(dbi_handler,username,password_handler,cursor_handler) - src.dbi = dbi_handler - src.user = username - src.password = password_handler - src.default_cursor = cursor_handler +DBConnection/New(dbi_handler, username, password_handler, cursor_handler) + dbi = dbi_handler + user = username + password = password_handler + default_cursor = cursor_handler _db_con = _dm_db_new_con() -DBConnection/proc/Connect(dbi_handler=src.dbi,user_handler=src.user,password_handler=src.password,cursor_handler) - if(!sqllogging) +DBConnection/proc/Connect(dbi_handler = dbi, user_handler = user, password_handler = password, cursor_handler) + if (!sqllogging) return 0 - if(!src) return 0 - cursor_handler = src.default_cursor - if(!cursor_handler) cursor_handler = Default_Cursor - return _dm_db_connect(_db_con,dbi_handler,user_handler,password_handler,cursor_handler,null) + if (!src) + return 0 + cursor_handler = default_cursor + if (!cursor_handler) + cursor_handler = Default_Cursor + return _dm_db_connect(_db_con,dbi_handler, user_handler, password_handler, cursor_handler, null) -DBConnection/proc/Disconnect() return _dm_db_close(_db_con) +DBConnection/proc/Disconnect() + return _dm_db_close(_db_con) DBConnection/proc/IsConnected() - if(!sqllogging) return 0 + if(!sqllogging) + return 0 var/success = _dm_db_is_connected(_db_con) return success -DBConnection/proc/Quote(str) return _dm_db_quote(_db_con,str) +DBConnection/proc/Quote(str) + return _dm_db_quote(_db_con,str) + +DBConnection/proc/ErrorMsg() + return _dm_db_error_msg(_db_con) -DBConnection/proc/ErrorMsg() return _dm_db_error_msg(_db_con) DBConnection/proc/SelectDB(database_name,dbi) if(IsConnected()) Disconnect() //return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[DB_SERVER]:[DB_PORT]"]",user,password) - return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]",user,password) -DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return new/DBQuery(sql_query,src,cursor_handler) - - -DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler) - if(sql_query) src.sql = sql_query - if(connection_handler) src.db_connection = connection_handler - if(cursor_handler) src.default_cursor = cursor_handler - _db_query = _dm_db_new_query() - return ..() + return Connect("[dbi?"[dbi]":"dbi:mysql:[database_name]:[sqladdress]:[sqlport]"]", user, password) +DBConnection/proc/NewQuery(sql_query, cursor_handler = default_cursor) + return new/DBQuery(sql_query, src, cursor_handler) DBQuery var/sql // The sql query being executed. @@ -98,34 +98,53 @@ DBQuery var/DBConnection/db_connection var/_db_query -DBQuery/proc/Connect(DBConnection/connection_handler) src.db_connection = connection_handler +DBQuery/New(var/sql_query, var/DBConnection/connection_handler, var/cursor_handler) + if (sql_query) + sql = sql_query + if (connection_handler) + db_connection = connection_handler + if (cursor_handler) + default_cursor = cursor_handler + _db_query = _dm_db_new_query() + return ..() -DBQuery/proc/Execute(sql_query=src.sql,cursor_handler=default_cursor) +DBQuery/proc/Connect(DBConnection/connection_handler) + db_connection = connection_handler + +DBQuery/proc/Execute(var/list/argumentList = null, var/passNotFound = 0, sql_query = sql, cursor_handler = default_cursor) Close() - return _dm_db_execute(_db_query,sql_query,db_connection._db_con,cursor_handler,null) -DBQuery/proc/NextRow() return _dm_db_next_row(_db_query,item,conversions) + if (argumentList) + parseArguments(argumentList, passNotFound) -DBQuery/proc/RowsAffected() return _dm_db_rows_affected(_db_query) + return _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null) -DBQuery/proc/RowCount() return _dm_db_row_count(_db_query) +DBQuery/proc/NextRow() + return _dm_db_next_row(_db_query,item,conversions) -DBQuery/proc/ErrorMsg() return _dm_db_error_msg(_db_query) +DBQuery/proc/RowsAffected() + return _dm_db_rows_affected(_db_query) + +DBQuery/proc/RowCount() + return _dm_db_row_count(_db_query) + +DBQuery/proc/ErrorMsg() + return _dm_db_error_msg(_db_query) DBQuery/proc/Columns() - if(!columns) + if (!columns) columns = _dm_db_columns(_db_query,/DBColumn) return columns DBQuery/proc/GetRowData() var/list/columns = Columns() var/list/results - if(columns.len) + if (columns.len) results = list() - for(var/C in columns) - results+=C + for (var/C in columns) + results += C var/DBColumn/cur_col = columns[C] - results[C] = src.item[(cur_col.position+1)] + results[C] = item[(cur_col.position+1)] return results DBQuery/proc/Close() @@ -138,11 +157,49 @@ DBQuery/proc/Quote(str) return db_connection.Quote(str) DBQuery/proc/SetConversion(column,conversion) - if(istext(column)) column = columns.Find(column) - if(!conversions) conversions = new/list(column) - else if(conversions.len < column) conversions.len = column + if (istext(column)) + column = columns.Find(column) + if (!conversions) + conversions = new/list(column) + else if (conversions.len < column) + conversions.len = column conversions[column] = conversion +/* Works similarly to the PDO object's Execute() method in PHP. +* Insert a list of keys/values, it searches the SQL syntax for the keys, +* and replaces them with sanitized versions of the values. +* Can be called independently, or through dbcon.Execute(), where the list would be the first argument. +* passNotFound controls whether or not is passes keys not found in the SQL query. +* Keys are /case-sensitive/, be careful! +* Returns FALSE upon failure, TRUE otherwise, so it can be used in checks and so on. +* - Skull132 +*/ +DBQuery/proc/parseArguments(var/list/argumentList, var/passNotFound = 0) + if (!sql || !argumentList || !argumentList.len) + return 0 + + for (var/placeholder in argumentList) + if (!findtextEx(sql, placeholder)) + if (passNotFound) + continue + else + return 0 + + var/argument = argumentList[placeholder] + + if (isnull(argument)) + argument = "NULL" + else if (istext(argument)) + argument = dbcon.Quote(argument) + else if (isnum(argument)) + argument = "'[argument]'" + else + return 0 + + sql = replacetextEx(sql, placeholder, argument) + + return 1 + DBColumn var/name @@ -153,32 +210,45 @@ DBColumn var/length var/max_length -DBColumn/New(name_handler,table_handler,position_handler,type_handler,flag_handler,length_handler,max_length_handler) - src.name = name_handler - src.table = table_handler - src.position = position_handler - src.sql_type = type_handler - src.flags = flag_handler - src.length = length_handler - src.max_length = max_length_handler +DBColumn/New(name_handler, table_handler, position_handler, type_handler, flag_handler, length_handler, max_length_handler) + name = name_handler + table = table_handler + position = position_handler + sql_type = type_handler + flags = flag_handler + length = length_handler + max_length = max_length_handler return ..() -DBColumn/proc/SqlTypeName(type_handler=src.sql_type) - switch(type_handler) - if(TINYINT) return "TINYINT" - if(SMALLINT) return "SMALLINT" - if(MEDIUMINT) return "MEDIUMINT" - if(INTEGER) return "INTEGER" - if(BIGINT) return "BIGINT" - if(FLOAT) return "FLOAT" - if(DOUBLE) return "DOUBLE" - if(DATE) return "DATE" - if(DATETIME) return "DATETIME" - if(TIMESTAMP) return "TIMESTAMP" - if(TIME) return "TIME" - if(STRING) return "STRING" - if(BLOB) return "BLOB" +DBColumn/proc/SqlTypeName(type_handler = sql_type) + switch (type_handler) + if (TINYINT) + return "TINYINT" + if (SMALLINT) + return "SMALLINT" + if (MEDIUMINT) + return "MEDIUMINT" + if (INTEGER) + return "INTEGER" + if (BIGINT) + return "BIGINT" + if (FLOAT) + return "FLOAT" + if (DOUBLE) + return "DOUBLE" + if (DATE) + return "DATE" + if (DATETIME) + return "DATETIME" + if (TIMESTAMP) + return "TIMESTAMP" + if (TIME) + return "TIME" + if (STRING) + return "STRING" + if (BLOB) + return "BLOB" #undef Default_Cursor diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index f9bb469f..599517ce 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -3,18 +3,36 @@ var/list/whitelist = list() /hook/startup/proc/loadWhitelist() - if(config.usewhitelist) + if (config.usewhitelist) load_whitelist() return 1 /proc/load_whitelist() - whitelist = file2list(WHITELISTFILE) - if(!whitelist.len) whitelist = null + if (config.whitelists_on_sql) + establish_db_connection() + + if (!dbcon.IsConnected()) + //Continue with the old code if it fails. Stop and return if it succeeds. + log_misc("Database connection failed. Reverting to legacy system.") + config.whitelists_on_sql = 0 + else + return + + whitelist = file2list(WHITELISTFILE) + if (!whitelist.len) + whitelist = null + +/proc/check_whitelist(mob/M) + if (config.whitelists_on_sql) + var/head_of_staff_whitelist = 1 + if (M.client && M.client.whitelist_status) + return (M.client.whitelist_status & head_of_staff_whitelist) -/proc/check_whitelist(mob/M /*, var/rank*/) - if(!whitelist) return 0 - return ("[M.ckey]" in whitelist) + else + if (!whitelist) + return 0 + return ("[M.ckey]" in whitelist) /var/list/alien_whitelist = list() @@ -24,6 +42,22 @@ var/list/whitelist = list() return 1 /proc/load_alienwhitelist() + if (config.whitelists_on_sql) + establish_db_connection() + + if (!dbcon.IsConnected()) + log_misc("Database connection failed. Reverting to legacy system.") + config.whitelists_on_sql = 0 + else + var/DBQuery/query = dbcon.NewQuery("SELECT status_name, flag FROM ss13_whitelist_statuses") + query.Execute() + + for (query.NextRow()) + if (query.item[1] in whitelisted_species) + whitelisted_species[query.item[1]] = text2num(query.item[2]) + + return + var/text = file2text("config/alienwhitelist.txt") if (!text) log_misc("Failed to load config/alienwhitelist.txt") @@ -32,19 +66,26 @@ var/list/whitelist = list() //todo: admin aliens /proc/is_alien_whitelisted(mob/M, var/species) - if(!config.usealienwhitelist) + if (!config.usealienwhitelist) return 1 - if(species == "human" || species == "Human") - return 1 -// if(check_rights(R_ADMIN, 0)) -// return 1 - if(!alien_whitelist) + + if (!M || !species) return 0 - if(M && species) + + if (species == "human" || species == "Human") + return 1 + + if (config.whitelists_on_sql) + if (M.client && M.client.whitelist_status) + return (M.client.whitelist_status & whitelisted_species[species]) + + else + if (!alien_whitelist) + return 0 for (var/s in alien_whitelist) - if(findtext(s,"[M.ckey] - [species]")) + if (findtext(s, "[M.ckey] - [species]")) return 1 - if(findtext(s,"[M.ckey] - All")) + if (findtext(s, "[M.ckey] - All")) return 1 return 0 diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index cdd394f4..f026c743 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,5 +46,6 @@ var/player_age = "Requires database" //So admins know why it isn't working - Used to determine how old the account is - in days. var/related_accounts_ip = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this ip var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id + var/whitelist_status = 0 //Used to determine what whitelists the player has access to. Bitflag field. preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index f461943b..135262c9 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -225,15 +225,14 @@ if(!dbcon.IsConnected()) return - var/sql_ckey = sql_sanitize_text(src.ckey) - - var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM ss13_player WHERE ckey = '[sql_ckey]'") - query.Execute() + var/DBQuery/query = dbcon.NewQuery("SELECT id, datediff(Now(),firstseen) as age, whitelist_status FROM ss13_player WHERE ckey = :ckey") + query.Execute(list(":ckey" = ckey)) var/sql_id = 0 player_age = 0 // New players won't have an entry so knowing we have a connection we set this to zero to be updated if their is a record. while(query.NextRow()) sql_id = query.item[1] player_age = text2num(query.item[2]) + whitelist_status = text2num(query.item[3]) break var/DBQuery/query_ip = dbcon.NewQuery("SELECT ckey FROM ss13_player WHERE ip = '[address]'") @@ -261,24 +260,19 @@ if(src.holder) admin_rank = src.holder.rank - var/sql_ip = sql_sanitize_text(src.address) - var/sql_computerid = sql_sanitize_text(src.computer_id) - var/sql_admin_rank = sql_sanitize_text(admin_rank) - - if(sql_id) //Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables - var/DBQuery/query_update = dbcon.NewQuery("UPDATE ss13_player SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]") - query_update.Execute() + var/DBQuery/query_update = dbcon.NewQuery("UPDATE ss13_player SET lastseen = Now(), ip = :ip, computerid = :computer_id, lastadminrank = :admin_rank WHERE id = :id") + query_update.Execute(list(":ip" = address, ":computer_id" = computer_id, ":admin_rank" = admin_rank, ":id" = sql_id)) else //New player!! Need to insert all the stuff - var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')") - query_insert.Execute() + var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO ss13_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, :ckey, Now(), Now(), :ip, :computer_id, :admin_rank)") + query_insert.Execute(list(":ckey" = ckey, ":ip" = address, ":computer_id" = computer_id, ":admin_rank" = admin_rank)) //Logging player access var/serverip = "[world.internet_address]:[world.port]" - var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `ss13_connection_log`(`id`,`datetime`,`serverip`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),'[serverip]','[sql_ckey]','[sql_ip]','[sql_computerid]');") - query_accesslog.Execute() + var/DBQuery/query_accesslog = dbcon.NewQuery("INSERT INTO `ss13_connection_log`(`id`, `datetime`, `serverip`, `ckey`, `ip`, `computerid`) VALUES(null, Now(), :server_ip, :ckey, :ip, :computer_id);") + query_accesslog.Execute(list(":server_ip" = serverip, ":ckey" = ckey, ":ip" = address, ":computer_id" = computer_id)) #undef TOPIC_SPAM_DELAY From dd3b1abcb3ca13d5a76dd65a60272d52a676f946 Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 30 Dec 2015 20:43:10 +0200 Subject: [PATCH 10/26] dbcore.dm Fix Changes how parseArguments works. It now returns a text string that is the cleaned SQL query. This is necessary. But also enables the usage of different lists on the same query, as the original sql query, with the unformatted placeholders, is still retained. --- code/defines/procs/dbcore.dm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/defines/procs/dbcore.dm b/code/defines/procs/dbcore.dm index af387497..2f4d419e 100644 --- a/code/defines/procs/dbcore.dm +++ b/code/defines/procs/dbcore.dm @@ -111,11 +111,11 @@ DBQuery/New(var/sql_query, var/DBConnection/connection_handler, var/cursor_handl DBQuery/proc/Connect(DBConnection/connection_handler) db_connection = connection_handler -DBQuery/proc/Execute(var/list/argumentList = null, var/passNotFound = 0, sql_query = sql, cursor_handler = default_cursor) +DBQuery/proc/Execute(var/list/argument_list = null, var/pass_not_found = 0, sql_query = sql, cursor_handler = default_cursor) Close() - if (argumentList) - parseArguments(argumentList, passNotFound) + if (argument_list) + sql_query = parseArguments(sql_query, argument_list, pass_not_found) return _dm_db_execute(_db_query, sql_query, db_connection._db_con, cursor_handler, null) @@ -171,21 +171,21 @@ DBQuery/proc/SetConversion(column,conversion) * Can be called independently, or through dbcon.Execute(), where the list would be the first argument. * passNotFound controls whether or not is passes keys not found in the SQL query. * Keys are /case-sensitive/, be careful! -* Returns FALSE upon failure, TRUE otherwise, so it can be used in checks and so on. +* Returns the parsed SQL query upon completion. * - Skull132 */ -DBQuery/proc/parseArguments(var/list/argumentList, var/passNotFound = 0) - if (!sql || !argumentList || !argumentList.len) +DBQuery/proc/parseArguments(var/query_to_parse = null, var/list/argument_list, var/pass_not_found = 0) + if (!query_to_parse || !argument_list || !argument_list.len) return 0 - for (var/placeholder in argumentList) + for (var/placeholder in argument_list) if (!findtextEx(sql, placeholder)) - if (passNotFound) + if (pass_not_found) continue else return 0 - var/argument = argumentList[placeholder] + var/argument = argument_list[placeholder] if (isnull(argument)) argument = "NULL" @@ -196,9 +196,9 @@ DBQuery/proc/parseArguments(var/list/argumentList, var/passNotFound = 0) else return 0 - sql = replacetextEx(sql, placeholder, argument) + query_to_parse = replacetextEx(sql, placeholder, argument) - return 1 + return query_to_parse DBColumn From 7f194bb235468d739a67b344dd22fbd8700c47fc Mon Sep 17 00:00:00 2001 From: skull132 Date: Wed, 30 Dec 2015 20:43:59 +0200 Subject: [PATCH 11/26] whitelist.dm - While v For This was silly of me. Replaces a for() loop with a while() loop. --- code/game/jobs/whitelist.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 599517ce..1fd78f9b 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -52,7 +52,7 @@ var/list/whitelist = list() var/DBQuery/query = dbcon.NewQuery("SELECT status_name, flag FROM ss13_whitelist_statuses") query.Execute() - for (query.NextRow()) + while (query.NextRow()) if (query.item[1] in whitelisted_species) whitelisted_species[query.item[1]] = text2num(query.item[2]) From 13181c38b1497b67df977570d95b556eefe66407 Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 1 Jan 2016 18:09:39 +0200 Subject: [PATCH 12/26] Door Bracers to Magnetic Locks Renames the entire deal. Also gives a powercell to the maglocks, making them last about 16 minutes with a high capacity powercell. Cell can be replaced by unscrewing the front, and crowbarring it. --- aurora.dme | 4 +- code/datums/supplypacks.dm | 24 +++---- code/game/machinery/doors/airlock.dm | 6 +- .../{door_bracer.dm => magnetic_lock.dm} | 72 ++++++++++++++----- 4 files changed, 70 insertions(+), 36 deletions(-) rename code/game/objects/items/devices/{door_bracer.dm => magnetic_lock.dm} (77%) diff --git a/aurora.dme b/aurora.dme index 1e11d8f1..b27abdd7 100644 --- a/aurora.dme +++ b/aurora.dme @@ -39,7 +39,7 @@ #define FILE_DIR "icons/obj/clothing/species/tajaran" #define FILE_DIR "icons/obj/clothing/species/unathi" #define FILE_DIR "icons/obj/custom_items" -#define FILE_DIR "icons/obj/door_braces" +#define FILE_DIR "icons/obj/magnetic_locks" #define FILE_DIR "icons/obj/doors" #define FILE_DIR "icons/obj/flora" #define FILE_DIR "icons/obj/machines" @@ -568,12 +568,12 @@ #include "code\game\objects\items\devices\binoculars.dm" #include "code\game\objects\items\devices\chameleonproj.dm" #include "code\game\objects\items\devices\debugger.dm" -#include "code\game\objects\items\devices\door_bracer.dm" #include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" #include "code\game\objects\items\devices\isocube.dm" #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" +#include "code\game\objects\items\devices\magnetic_lock.dm" #include "code\game\objects\items\devices\megaphone.dm" #include "code\game\objects\items\devices\modkit.dm" #include "code\game\objects\items\devices\multitool.dm" diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 6da7f62f..f01bfdb3 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1346,22 +1346,22 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee access = access_medical group = "Medical / Science" -/datum/supply_packs/doorbracers_engineering - name = "Engineering Doorbracer Crate" - contains = list(/obj/item/device/doorbrace/engineering, - /obj/item/device/doorbrace/engineering, - /obj/item/device/doorbrace/engineering) +/datum/supply_packs/maglocks_engineering + name = "Engineering Magnetic Lock Crate" + contains = list(/obj/item/device/magnetic_lock/engineering, + /obj/item/device/magnetic_lock/engineering, + /obj/item/device/magnetic_lock/engineering) cost = 30 containertype = /obj/structure/closet/crate - containername = "engineering doorbracers" + containername = "engineering magnetic locks" group = "Engineering" -/datum/supply_packs/doorbracers_security - name = "Security Doorbracer Crate" - contains = list(/obj/item/device/doorbrace/security, - /obj/item/device/doorbrace/security, - /obj/item/device/doorbrace/security) +/datum/supply_packs/maglocks_security + name = "Security Magnetic Lock Crate" + contains = list(/obj/item/device/magnetic_lock/security, + /obj/item/device/magnetic_lock/security, + /obj/item/device/magnetic_lock/security) cost = 30 containertype = /obj/structure/closet/crate - containername = "security doorbracers" + containername = "security magnetic locks" group = "Security" diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 4712c727..917ae117 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -51,7 +51,7 @@ var/door_sound='sound/machines/airlock.ogg' var/door_sound_distance=30 autoclose = 1 - var/obj/item/device/doorbrace/bracer = null + var/obj/item/device/magnetic_lock/bracer = null /obj/machinery/door/airlock/command name = "Airlock" @@ -718,12 +718,12 @@ About the new airlock wires panel: set_frequency(ST.change_freq(frequency)) return - if (istype(C, /obj/item/device/doorbrace)) + if (istype(C, /obj/item/device/magnetic_lock)) if (bracer) user << "There is already a [bracer] on [src]!" return - var/obj/item/device/doorbrace/newbracer = C + var/obj/item/device/magnetic_lock/newbracer = C newbracer.attachto(src, user) return diff --git a/code/game/objects/items/devices/door_bracer.dm b/code/game/objects/items/devices/magnetic_lock.dm similarity index 77% rename from code/game/objects/items/devices/door_bracer.dm rename to code/game/objects/items/devices/magnetic_lock.dm index 8c45f2cf..9b261401 100644 --- a/code/game/objects/items/devices/door_bracer.dm +++ b/code/game/objects/items/devices/magnetic_lock.dm @@ -5,10 +5,10 @@ #define LAYER_ATTACHED 3.2 #define LAYER_NORMAL 3 -/obj/item/device/doorbrace +/obj/item/device/magnetic_lock name = "magnetic door lock" desc = "A large, ID locked device used for completely locking down airlocks." - icon = 'icons/obj/door_braces/centcom.dmi' + icon = 'icons/obj/magnetic_locks/centcom.dmi' icon_state = "inactive" w_class = 3 req_access = list(103) @@ -17,38 +17,49 @@ var/department = "CENTCOM" var/status = 0 var/constructionstate = 0 + var/drainamount = 20 var/obj/machinery/door/airlock/target = null + var/obj/item/weapon/cell/powercell -/obj/item/device/doorbrace/security - icon = 'icons/obj/door_braces/security.dmi' +/obj/item/device/magnetic_lock/security + icon = 'icons/obj/magnetic_locks/security.dmi' department = "Security" req_access = list(1) -/obj/item/device/doorbrace/engineering - icon = 'icons/obj/door_braces/engineering.dmi' +/obj/item/device/magnetic_lock/engineering + icon = 'icons/obj/magnetic_locks/engineering.dmi' department = "Engineering" req_access = null req_one_access = list(11, 24) -/obj/item/device/doorbrace/examine() +/obj/item/device/magnetic_lock/New() + ..() + + powercell = new /obj/item/weapon/cell/high() + +/obj/item/device/magnetic_lock/examine() ..() if (status == STATUS_BROKEN) usr << "It looks broken!" else - usr << "\blue This device has [department] department markings on it." + if (powercell) + var/power = round(powercell.charge / powercell.maxcharge * 100) + usr << "\blue The powercell is at [power]% charge." + else + usr << "\red It has no powercell to power it!" -/obj/item/device/doorbrace/attack_hand(var/mob/user) +/obj/item/device/magnetic_lock/attack_hand(var/mob/user) if (status == STATUS_ACTIVE) ui_interact(user) else ..() -/obj/item/device/doorbrace/bullet_act(var/obj/item/projectile/Proj) +/obj/item/device/magnetic_lock/bullet_act(var/obj/item/projectile/Proj) takedamage(Proj.damage) ..() -/obj/item/device/doorbrace/attackby(var/obj/item/I, var/mob/user) +/obj/item/device/magnetic_lock/attackby(var/obj/item/I, var/mob/user) if (status == STATUS_BROKEN) user << "[src] is broken beyond repair!" return @@ -97,6 +108,16 @@ playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) setconstructionstate(0) return + if (istype(I, /obj/item/weapon/cell)) + user.drop_item() + I.loc = src + powercell = I + return + if (istype(I, /obj/item/weapon/crowbar)) + user << "You remove \the [powercell] from \the [src]." + powercell.loc = loc + powercell = null + return if (istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = I if (WT.remove_fuel(1, user)) @@ -119,7 +140,16 @@ setconstructionstate(4) return -/obj/item/device/doorbrace/proc/attachto(var/obj/machinery/door/airlock/newtarget, var/mob/user as mob) +/obj/item/device/magnetic_lock/process() + if (powercell && powercell.charge > drainamount) + powercell.charge -= drainamount + else + if (powercell) + powercell.charge = 0 + visible_message("[src] beeps loudly and falls off \the [target]; its powercell having run out of power.") + setstatus(STATUS_INACTIVE) + +/obj/item/device/magnetic_lock/proc/attachto(var/obj/machinery/door/airlock/newtarget, var/mob/user as mob) if (status == STATUS_BROKEN) user << "[src] is damaged beyond repair! It cannot be used!" return @@ -152,7 +182,7 @@ setstatus(STATUS_ACTIVE, newtarget) return -/obj/item/device/doorbrace/proc/setstatus(var/newstatus, var/obj/machinery/door/airlock/newtarget as obj) +/obj/item/device/magnetic_lock/proc/setstatus(var/newstatus, var/obj/machinery/door/airlock/newtarget as obj) switch (newstatus) if (STATUS_INACTIVE) if (status != STATUS_ACTIVE) @@ -187,7 +217,7 @@ icon_state = "broken" status = newstatus -/obj/item/device/doorbrace/proc/setconstructionstate(var/newstate) +/obj/item/device/magnetic_lock/proc/setconstructionstate(var/newstate) constructionstate = newstate if (newstate == 0) if (status == STATUS_ACTIVE) @@ -201,7 +231,7 @@ else icon_state = "deconstruct_[constructionstate]" -/obj/item/device/doorbrace/proc/detach(var/playflick = 1) +/obj/item/device/magnetic_lock/proc/detach(var/playflick = 1) if (target) if (playflick) @@ -212,9 +242,11 @@ target.bracer = null + processing_objects.Remove(src) + anchored = 0 -/obj/item/device/doorbrace/proc/attach(var/obj/machinery/door/airlock/newtarget as obj) +/obj/item/device/magnetic_lock/proc/attach(var/obj/machinery/door/airlock/newtarget as obj) adjustsprite(newtarget) layer = LAYER_ATTACHED flick("deploy", src) @@ -222,9 +254,11 @@ newtarget.bracer = src target = newtarget + processing_objects.Add(src) + anchored = 1 -/obj/item/device/doorbrace/proc/adjustsprite(var/obj/target as obj) +/obj/item/device/magnetic_lock/proc/adjustsprite(var/obj/target as obj) if (target) switch (get_dir(src, target)) if (NORTH) @@ -255,7 +289,7 @@ pixel_x = 0 pixel_y = 0 -/obj/item/device/doorbrace/proc/takedamage(var/damage) +/obj/item/device/magnetic_lock/proc/takedamage(var/damage) health -= damage if (damage >= 40 && prob(50)) @@ -269,7 +303,7 @@ if (prob(50)) spark() -/obj/item/device/doorbrace/proc/spark() +/obj/item/device/magnetic_lock/proc/spark() var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread if (target) From 3b867d3bf6f8f7ccb2f2188090529e00aee6c40f Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 1 Jan 2016 18:10:06 +0200 Subject: [PATCH 13/26] Magnetic Lock Sprite Shift Renames the sprite folder for magnetic locks. --- .../obj/{door_braces => magnetic_locks}/centcom.dmi | Bin .../{door_braces => magnetic_locks}/engineering.dmi | Bin .../{door_braces => magnetic_locks}/security.dmi | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename icons/obj/{door_braces => magnetic_locks}/centcom.dmi (100%) rename icons/obj/{door_braces => magnetic_locks}/engineering.dmi (100%) rename icons/obj/{door_braces => magnetic_locks}/security.dmi (100%) diff --git a/icons/obj/door_braces/centcom.dmi b/icons/obj/magnetic_locks/centcom.dmi similarity index 100% rename from icons/obj/door_braces/centcom.dmi rename to icons/obj/magnetic_locks/centcom.dmi diff --git a/icons/obj/door_braces/engineering.dmi b/icons/obj/magnetic_locks/engineering.dmi similarity index 100% rename from icons/obj/door_braces/engineering.dmi rename to icons/obj/magnetic_locks/engineering.dmi diff --git a/icons/obj/door_braces/security.dmi b/icons/obj/magnetic_locks/security.dmi similarity index 100% rename from icons/obj/door_braces/security.dmi rename to icons/obj/magnetic_locks/security.dmi From dcd5e6d42769ff73ab42cbcea6c922d0ca644e9d Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 1 Jan 2016 18:20:54 +0200 Subject: [PATCH 14/26] Vaurca Fixes * Should make their eyes get damaged with flases proper now * Makes them actually resistant to electric shock and walking on glass --- .../game/objects/items/stacks/sheets/glass.dm | 2 ++ .../items/weapons/grenades/flashbang.dm | 19 +++++++++++++++++++ code/modules/mob/living/carbon/human/life.dm | 7 +++++++ .../mob/living/carbon/human/species.dm | 4 +++- code/modules/power/power.dm | 4 +++- 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 909f65b4..b068a041 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -294,6 +294,8 @@ if(H.species.flags & IS_SYNTHETIC) return + if(istype(H) && H.species.insulated)//Insulation + return if(M.buckled && istype(M.buckled, /obj/structure/stool/bed/chair/wheelchair)) return ..() diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 3e0d0673..9ca356b4 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -52,6 +52,25 @@ flick("e_flash", M.flash) M.Stun(2) M.Weaken(10) + //Vaurca damage 29-012-15 + var/mob/living/carbon/human/H = M + if(H.species.flags & IS_BUG) + var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"] + if(!E) + return + //Reworked damage 29/12/15 + usr << "\red Your eyes burn with the intense light of the flash!." + E.damage += rand(10, 11) + if(E.damage > 12) + M.eye_blurry += rand(3,6) + if (E.damage >= E.min_broken_damage) + M.sdisabilities |= BLIND + else if (E.damage >= E.min_bruised_damage) + M.eye_blind = 5 + M.eye_blurry = 5 + M.disabilities |= NEARSIGHTED + spawn(100) + M.disabilities &= ~NEARSIGHTED diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index cedf42d0..ea2333a6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1132,6 +1132,10 @@ return //TODO: DEFERRED proc/handle_regular_status_updates() + if(species.flags & IS_BUG) + adjustBruteLoss(0) + adjustFireLoss(0) + if(status_flags & GODMODE) return 0 @@ -1408,6 +1412,9 @@ see_in_dark = 8 if(!druggy) see_invisible = SEE_INVISIBLE_OBSERVER_NOLIGHTING + if(species.flags & IS_BUG) //Vaurca nightvision 29/12/15 + see_in_dark = 8 + if(seer==1) var/obj/effect/rune/R = locate() in loc if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"]) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 037538a9..ec03d213 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -75,6 +75,7 @@ var/blood_color = "#A10808" //Red. var/flesh_color = "#FFC896" //Pink. var/base_color //Used when setting species. + var/darkness_view //Used in icon caching. var/race_key = 0 @@ -626,7 +627,8 @@ See code\modules\mob\new_player\preferences_setup.dm for where it's used. secondary_unarmed_type = /datum/unarmed_attack/bite/strong rarity_value = 2 //according to the code this does nothing but upset me so i guess it can stay slowdown = 1 //slow - darksight = 666 //good at seeing + darksight = 8 //good at seeing + darkness_view = 7 eyes = "blank_eyes" //made out of butts brute_mod = 0.5 //note to self: remove is_synthetic checks for brmod and burnmod burn_mod = 2 //bugs on fire diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 19388bfa..f314d5c3 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -273,11 +273,13 @@ //No animations will be performed by this proc. /proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0) if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb + var/mob/living/carbon/human/H = M //29/12/2015 INSULATION INITIATION + if(istype(H) && H.species.insulated) return 0 //This is for performance optimization only. //DO NOT modify siemens_coeff here. That is checked in human/electrocute_act() if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M + //var/mob/living/carbon/human/H = M Changed for inulation 29/12/15 if(H.gloves) var/obj/item/clothing/gloves/G = H.gloves if(G.siemens_coefficient == 0) return 0 //to avoid spamming with insulated glvoes on From 6e76f740c49fcc6fa6a328dc9eba465cd1d9d3fd Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 1 Jan 2016 18:27:55 +0200 Subject: [PATCH 15/26] Magnetic Locks - Map Update --- aurora.dme | 2 +- maps/tgstation2.dmm | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/aurora.dme b/aurora.dme index b27abdd7..6ddcd549 100644 --- a/aurora.dme +++ b/aurora.dme @@ -39,10 +39,10 @@ #define FILE_DIR "icons/obj/clothing/species/tajaran" #define FILE_DIR "icons/obj/clothing/species/unathi" #define FILE_DIR "icons/obj/custom_items" -#define FILE_DIR "icons/obj/magnetic_locks" #define FILE_DIR "icons/obj/doors" #define FILE_DIR "icons/obj/flora" #define FILE_DIR "icons/obj/machines" +#define FILE_DIR "icons/obj/magnetic_locks" #define FILE_DIR "icons/obj/pipes" #define FILE_DIR "icons/pda_icons" #define FILE_DIR "icons/spideros_icons" diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index eb218d24..370eeb84 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -638,7 +638,7 @@ "amn" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/structure/window/reinforced{dir = 4},/obj/item/device/binoculars,/obj/item/device/binoculars,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury) "amo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/armoury) "amp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/armoury) -"amq" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/rack,/obj/item/device/doorbrace/security{pixel_x = 5; pixel_y = -5},/obj/item/device/doorbrace/security,/obj/item/device/doorbrace/security{pixel_x = -5; pixel_y = 5},/turf/simulated/floor,/area/security/armoury) +"amq" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/rack,/obj/item/device/magnetic_lock/security{pixel_x = 5; pixel_y = -5},/obj/item/device/magnetic_lock/security,/obj/item/device/magnetic_lock/security{pixel_x = -5; pixel_y = 5},/turf/simulated/floor,/area/security/armoury) "amr" = (/obj/structure/dispenser{plasmatanks = 0},/obj/machinery/alarm{locked = 1; pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/obj/machinery/camera{dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/security/armoury) "ams" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/solar/auxport) "amt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/solar/auxport) @@ -6613,7 +6613,7 @@ "cxi" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "cxj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft) "cxk" = (/turf/simulated/wall/r_wall,/area/engine/storage_hard) -"cxl" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Storage APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/table/reinforced{icon_state = "table"},/obj/item/device/doorbrace/engineering{pixel_x = 5; pixel_y = -5},/obj/item/device/doorbrace/engineering,/obj/item/device/doorbrace/engineering{pixel_x = -5; pixel_y = 5},/turf/simulated/floor,/area/engine/storage) +"cxl" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Storage APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/table/reinforced{icon_state = "table"},/obj/item/device/magnetic_lock/engineering{pixel_x = 5; pixel_y = -5},/obj/item/device/magnetic_lock/engineering,/obj/item/device/magnetic_lock/engineering{pixel_x = -5; pixel_y = 5},/turf/simulated/floor,/area/engine/storage) "cxm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/turf/simulated/floor,/area/engine/storage) "cxn" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/engine/storage) "cxo" = (/obj/structure/table,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/cable_coil,/obj/item/weapon/cable_coil,/obj/item/clothing/glasses/welding,/obj/item/weapon/book/manual/supermatter_engine,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/turf/simulated/floor,/area/engine/storage) @@ -13544,3 +13544,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + From fe26886fcfd666a8d3ed38549edcf1c38307a50a Mon Sep 17 00:00:00 2001 From: skull132 Date: Fri, 1 Jan 2016 18:42:41 +0200 Subject: [PATCH 16/26] Changelog - 02JAN2015 --- html/changelog.html | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index b8be1889..a498abb7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,19 @@ should be listed in the changelog upon commit though. Thanks. --> +
+

2 December 2015

+

Skull132 Updated:

+
    +
  • Fuel fires are back in the game (both welder fuel and flamethrowers burn properly).
  • +
  • Reworks whitelists to be SQL dependant, as opposed to running from a local file (should speed up server reboots).
  • +
  • Tweaks magnetic locks to have a powercell. Standard high cap cell will run a magnetic lock for about 16 minutes. Cells can be removed by using a screwdriver, then a crowbar.
  • +
  • Vaurca eyes now take damage from flashbangs and flashes.
  • +
  • Vaurca are now properly 'insulated' and resistant to electric shock.
  • +
  • Multiple bugfixes on the map, by Witt.
  • +
+
+

8 December 2015

SoundScopes updated:

@@ -70,8 +83,6 @@ should be listed in the changelog upon commit though. Thanks. -->
- -

Probably October

SoundScopes updated:

@@ -86,7 +97,6 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Peanut seed sprite
  • Space has been fixed so you only need to define an area once
  • SQL bug
  • -
    From 52de48dd0a2aa4b8dc6e390874cefca81a8ca5c1 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:29:05 +0200 Subject: [PATCH 17/26] Enthralling Loyalty Implanted People Vampires can no longer enthrall loyalty implanted people, and will be informed as such. --- code/game/gamemodes/vampire/vampire_powers.dm | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index b54efcc6..00e34610 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -293,9 +293,10 @@ M.current.remove_vampire_blood(150) M.current.verbs -= /client/vampire/proc/vampire_enthrall spawn(1800) M.current.verbs += /client/vampire/proc/vampire_enthrall - else - M.current << "\red You or your target either moved or you dont have enough usable blood." - return + return + else + M.current << "\red You or your target either moved or you dont have enough usable blood." + return /client/vampire/proc/vampire_cloak() set category = "Abilities" @@ -327,14 +328,14 @@ /mob/proc/can_enthrall(mob/living/carbon/C) var/enthrall_safe = 0 -/* for(var/obj/item/weapon/implant/loyalty/L in C) + for(var/obj/item/weapon/implant/loyalty/L in C) if(L && L.implanted) enthrall_safe = 1 break - for(var/obj/item/weapon/implant/traitor/T in C) - if(T && T.implanted) - enthrall_safe = 1 - break*/ +// for(var/obj/item/weapon/implant/traitor/T in C) +// if(T && T.implanted) +// enthrall_safe = 1 +// break if(!C) world.log << "something bad happened on enthralling a mob src is [src] [src.key] \ref[src]" return 0 @@ -526,4 +527,4 @@ bloodold = mind.vampire.bloodusable mind.vampire.bloodusable = max(0, (mind.vampire.bloodusable - amount)) if(bloodold != mind.vampire.bloodusable) - src << "\blue You have [mind.vampire.bloodusable] left to use." \ No newline at end of file + src << "\blue You have [mind.vampire.bloodusable] left to use." From 01bececd55a8ddf673f1428dd23a801b96ec1fdd Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:30:30 +0200 Subject: [PATCH 18/26] Loyalty Implant Fixes Fixes the duplicate definition of the implanted() proc. Head revolutionaries can no longer be implanted, normal revolutionaries will actually lose their rev status when implanted, and lings will be informed of the fact that they can avoid the implant's effects. --- .../objects/items/weapons/implants/implant.dm | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index eb98d587..7e4ab4c2 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -333,22 +333,20 @@ the implant may become unstable and either pre-maturely inject the subject or si implanted(mob/M) - if(!istype(M, /mob/living/carbon/human)) return 0 + if(!istype(M, /mob/living/carbon/human)) + return 0 var/mob/living/carbon/human/H = M - if(H.mind in ticker.mode.head_revolutionaries) + if (H.mind in ticker.mode.head_revolutionaries) H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") return 0 - else if(H.mind in ticker.mode:revolutionaries) + else if (H.mind in ticker.mode:revolutionaries) ticker.mode:remove_revolutionary(H.mind) - H << "\blue You feel a surge of loyalty towards Nanotrasen." - return 1 - - implanted(mob/M) - if(!istype(M, /mob/living/carbon/human)) return 0 - var/mob/living/carbon/human/H = M - if(H.mind in ticker.mode:cult) + else if (H.mind in ticker.mode:cult) ticker.mode:remove_cultist(M.mind) - H << "\blue The implant robs you of your faith in Nar-Sie, leaving only obedience to NanoTrasen." + H << "\blue The implant robs you of your faith in Nar-Sie, leaving only obedience to NanoTrasen." + else if (H.mind in ticker.mode:changelings) + H << "\blue We have weaved our flesh around and isolated the simple chip. It has no effect on us. But they do not know it yet..." + H << "\blue You feel a surge of loyalty towards Nanotrasen." return 1 //Alternatively! This is the null-rod deconversion, if the above doesn't work. There's two things down there and I don't know if that's okay. From 8d165145f90ac6b00e58ce986c0e93ce22f31729 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:31:20 +0200 Subject: [PATCH 19/26] Adrenalin Implants For Syndies Traitors and syndies will now gain access to an adrenalin implant box. The implant is a one-use tool for getting yourself unstunned and off the ground. Also makes the adrenalin implants work with the pain-based stuns. --- code/game/gamemodes/factions.dm | 1 + code/game/gamemodes/game_mode.dm | 1 + code/game/objects/items/weapons/implants/implant.dm | 13 ++++++++++--- .../objects/items/weapons/storage/uplink_kits.dm | 10 ++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/factions.dm b/code/game/gamemodes/factions.dm index 8572b5a4..36476f13 100644 --- a/code/game/gamemodes/factions.dm +++ b/code/game/gamemodes/factions.dm @@ -157,6 +157,7 @@ Devices and Tools; Whitespace:Seperator; Implants; /obj/item/weapon/storage/box/syndie_kit/imp_freedom:3:Freedom Implant; +/obj/item/weapon/storage/box/syndie_kit/imp_adrenalin:3:Adrenalin Implant; /obj/item/weapon/storage/box/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); Whitespace:Seperator; (Pointless) Badassery; diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 6a764b4c..a50acff2 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -72,6 +72,7 @@ Devices and Tools; Whitespace:Seperator; Implants; /obj/item/weapon/storage/box/syndie_kit/imp_freedom:3:Freedom Implant; +/obj/item/weapon/storage/box/syndie_kit/imp_adrenalin:3:Adrenalin Implant; /obj/item/weapon/storage/box/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals); /obj/item/weapon/storage/box/syndie_kit/imp_explosive:6:Explosive Implant (DANGER!); /obj/item/weapon/storage/box/syndie_kit/imp_compress:4:Compressed Matter Implant;Whitespace:Seperator; diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 7e4ab4c2..fae8144b 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -384,14 +384,21 @@ the implant may become unstable and either pre-maturely inject the subject or si return dat - trigger(emote, mob/source as mob) - if (src.uses < 1) return 0 + trigger(emote, mob/living/carbon/human/source as mob) + if (src.uses < 1) + return 0 + if (!istype(source)) + return 0 if (emote == "pale") src.uses-- source << "\blue You feel a sudden surge of energy!" + source.stat = 0 + source.SetParalysis(0) source.SetStunned(0) source.SetWeakened(0) - source.SetParalysis(0) + source.lying = 0 + source.setHalLoss(0) + source.update_canmove() return diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 2792aae8..81cbb950 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -82,6 +82,16 @@ O.update() return +/obj/item/weapon/storage/box/syndie_kit/imp_adrenalin + name = "boxed adrenalin implant (with injector)" + +/obj/item/weapon/storage/box/syndie_kit/imp_adrenalin/New() + ..() + var/obj/item/weapon/implanter/O = new(src) + O.imp = new /obj/item/weapon/implant/adrenalin(O) + O.update() + return + /obj/item/weapon/storage/box/syndie_kit/imp_compress name = "box (C)" From 7bf23fcef5939cf6db5dfe339872f9ddd4fdc349 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:45:57 +0200 Subject: [PATCH 20/26] Vampires Sucking Bloodpacks Vampires can now drain blood from bloodpacks by attacking themselves with it. Note that only total blood is given, not usable blood. --- .../reagents/reagent_containers/blood_pack.dm | 57 ++++++++++++++----- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index c091f1db..91a8df90 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -7,22 +7,51 @@ var/blood_type = null - New() - ..() - if(blood_type != null) - name = "BloodPack [blood_type]" - reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) - update_icon() - - on_reagent_change() +/obj/item/weapon/reagent_containers/blood/New() + ..() + if(blood_type != null) + name = "BloodPack [blood_type]" + reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null)) update_icon() +/obj/item/weapon/reagent_containers/blood/on_reagent_change() update_icon() - var/percent = round((reagents.total_volume / volume) * 100) - switch(percent) - if(0 to 9) icon_state = "empty" - if(10 to 50) icon_state = "half" - if(51 to INFINITY) icon_state = "full" + +/obj/item/weapon/reagent_containers/blood/update_icon() + var/percent = round((reagents.total_volume / volume) * 100) + switch(percent) + if(0 to 9) icon_state = "empty" + if(10 to 50) icon_state = "half" + if(51 to INFINITY) icon_state = "full" + +/obj/item/weapon/reagent_containers/blood/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob) + if (user == M && (user.mind in ticker.mode.vampires || user.mind.vampire)) + if (reagents.get_reagent_amount("blood")) + user.visible_message("\red [user] raises \the [src] up to \his mouth and bites into it.", "\blue You raise \the [src] up to your mouth and bite into it, starting to drain its contents.") + + while (do_after(user, 25, 5, 1)) + var/blood_taken = 0 + var/need_to_break = 0 + if (reagents.get_reagent_amount("blood") > 10) + blood_taken = 10 + else + blood_taken = reagents.get_reagent_amount("blood") + need_to_break = 1 + + reagents.remove_reagent("blood", blood_taken) + user.mind.vampire.bloodtotal += blood_taken + user.check_vampire_upgrade(user.mind) + + if (blood_taken) + user << "\blue You have accumulated [user.mind.vampire.bloodtotal] [user.mind.vampire.bloodtotal > 1 ? "units" : "unit"] of blood and have [user.mind.vampire.bloodusable] left to use." + + if (need_to_break) + break + + user.visible_message("\red [user] licks \his fangs dry, lowering \the [src].", "\blue You lick your fangs clean of the tasteless blood.") + + else + ..() /obj/item/weapon/reagent_containers/blood/APlus blood_type = "A+" @@ -45,4 +74,4 @@ /obj/item/weapon/reagent_containers/blood/empty name = "Empty BloodPack" desc = "Seems pretty useless... Maybe if there were a way to fill it?" - icon_state = "empty" \ No newline at end of file + icon_state = "empty" From 9a5f342eed88c83347dc962dd3f5019e1f0cbf1a Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:49:45 +0200 Subject: [PATCH 21/26] Changelog Update - 04JAN2015 --- html/changelog.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/html/changelog.html b/html/changelog.html index a498abb7..6b3619bf 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -57,12 +57,16 @@ should be listed in the changelog upon commit though. Thanks. -->
    -

    2 December 2015

    +

    04 January 2015

    Skull132 Updated:

    • Fuel fires are back in the game (both welder fuel and flamethrowers burn properly).
    • +
    • Adrenalin implant kits added to syndicate uplinks, worth 3 TC.
    • +
    • Gave the vampires the ability to suck blood from bloodpacks. Just attack yourself with one. Note that only total blood is gained, not usable blood.
    • +
    • Loyalty implants tweaked: messages are now handled properly, head revs are safe once more, revs are properly removed, lings are given instructions on the fact that they can ignore the implant's effect.
    • Reworks whitelists to be SQL dependant, as opposed to running from a local file (should speed up server reboots).
    • Tweaks magnetic locks to have a powercell. Standard high cap cell will run a magnetic lock for about 16 minutes. Cells can be removed by using a screwdriver, then a crowbar.
    • +
    • Loyalty implanted people cannot be enthralled. The vampire is now informed as such and the enthralling will fail.
    • Vaurca eyes now take damage from flashbangs and flashes.
    • Vaurca are now properly 'insulated' and resistant to electric shock.
    • Multiple bugfixes on the map, by Witt.
    • From fa5ccb982f8e14d62c9288878a3c21c094ee033e Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:51:28 +0200 Subject: [PATCH 22/26] Changelog Update - Clarification Added --- html/changelog.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/changelog.html b/html/changelog.html index 6b3619bf..5915f7bf 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -61,7 +61,7 @@ should be listed in the changelog upon commit though. Thanks. -->

      Skull132 Updated:

      • Fuel fires are back in the game (both welder fuel and flamethrowers burn properly).
      • -
      • Adrenalin implant kits added to syndicate uplinks, worth 3 TC.
      • +
      • Adrenalin implant kits added to syndicate uplinks, worth 3 TC. Upon activation, the implant removes any and all stun effects that you have.
      • Gave the vampires the ability to suck blood from bloodpacks. Just attack yourself with one. Note that only total blood is gained, not usable blood.
      • Loyalty implants tweaked: messages are now handled properly, head revs are safe once more, revs are properly removed, lings are given instructions on the fact that they can ignore the implant's effect.
      • Reworks whitelists to be SQL dependant, as opposed to running from a local file (should speed up server reboots).
      • From 82cbfe3f952be8caf0265b73bff1b7b4dbf54252 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:58:34 +0200 Subject: [PATCH 23/26] Remove Borers From HealthHUDs Having a borer in you will no longer flag you as special on a healthHUD. --- code/game/mecha/medical/odysseus.dm | 6 ------ code/modules/mob/living/carbon/human/life.dm | 7 ------- code/modules/mob/living/silicon/pai/hud.dm | 8 +------- 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index b1ffc912..453b5e4f 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -108,12 +108,6 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" - else if(patient.has_brain_worms()) - var/mob/living/simple_animal/borer/B = patient.has_brain_worms() - if(B.controlling) - holder.icon_state = "hudbrainworm" - else - holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ea2333a6..1d6f375f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1824,13 +1824,6 @@ holder2.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" - else if(has_brain_worms()) - var/mob/living/simple_animal/borer/B = has_brain_worms() - if(B.controlling) - holder.icon_state = "hudbrainworm" - else - holder.icon_state = "hudhealthy" - holder2.icon_state = "hudbrainworm" else holder.icon_state = "hudhealthy" if(virus2.len) diff --git a/code/modules/mob/living/silicon/pai/hud.dm b/code/modules/mob/living/silicon/pai/hud.dm index 18ccd308..ad51477d 100644 --- a/code/modules/mob/living/silicon/pai/hud.dm +++ b/code/modules/mob/living/silicon/pai/hud.dm @@ -74,12 +74,6 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" - else if(patient.has_brain_worms()) - var/mob/living/simple_animal/borer/B = patient.has_brain_worms() - if(B.controlling) - holder.icon_state = "hudbrainworm" - else - holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" client.images += holder @@ -104,4 +98,4 @@ return "health0" else return "health-100" - return "0" \ No newline at end of file + return "0" From bfee957063a801d47c70ecd4b66db7f73a152176 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 15:58:52 +0200 Subject: [PATCH 24/26] Changelog - Borer Fix --- html/changelog.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/html/changelog.html b/html/changelog.html index 5915f7bf..c4c4d95d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -64,12 +64,15 @@ should be listed in the changelog upon commit though. Thanks. -->
      • Adrenalin implant kits added to syndicate uplinks, worth 3 TC. Upon activation, the implant removes any and all stun effects that you have.
      • Gave the vampires the ability to suck blood from bloodpacks. Just attack yourself with one. Note that only total blood is gained, not usable blood.
      • Loyalty implants tweaked: messages are now handled properly, head revs are safe once more, revs are properly removed, lings are given instructions on the fact that they can ignore the implant's effect.
      • +
      • Having a cortical borer in your head no longer flags you as such on the medical HUD.
      • Reworks whitelists to be SQL dependant, as opposed to running from a local file (should speed up server reboots).
      • Tweaks magnetic locks to have a powercell. Standard high cap cell will run a magnetic lock for about 16 minutes. Cells can be removed by using a screwdriver, then a crowbar.
      • Loyalty implanted people cannot be enthralled. The vampire is now informed as such and the enthralling will fail.
      • Vaurca eyes now take damage from flashbangs and flashes.
      • Vaurca are now properly 'insulated' and resistant to electric shock.
      • Multiple bugfixes on the map, by Witt.
      • +
      • Organ transplants are fixed and now work, with the possible exception of eyes. Need to test. This also means that you can use the use the advanced operating table to conduct full on brain transplants.
      • +
      • Head re-attachment surgery no longer deletes the brain.
    From 158c21aa6b5bb1318d81ddf8e5d203fb2c0c2136 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 16:13:39 +0200 Subject: [PATCH 25/26] Map Update - 04JAN2016 A lot of fixes, by Wittme. Also removes Christmas fluff, what little there was. --- maps/tgstation2.dmm | 523 ++++++++++++++++++++++---------------------- 1 file changed, 264 insertions(+), 259 deletions(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index 370eeb84..f7195fd3 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -86,7 +86,7 @@ "abH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/captain) "abI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/woodentable,/obj/item/weapon/melee/chainofcommand,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/captain) "abJ" = (/obj/item/clothing/suit/armor/captain,/obj/item/clothing/head/helmet/space/capspace,/obj/structure/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/captain) -"abK" = (/obj/structure/table/woodentable,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/faxmachine{department = "Captain's Office"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/captain) +"abK" = (/obj/structure/table/woodentable,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/captain) "abL" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/captain) "abM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "capt"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "heads_meeting"; name = "Meeting Room Window Shields"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/captain) "abN" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/turf/simulated/floor/wood,/area/bridge/meeting_room) @@ -1153,11 +1153,11 @@ "awi" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/sleep) "awj" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/crew_quarters/sleep) "awk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"awl" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/security/cell_block) +"awl" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/security/cell_block) "awm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block) "awn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block) "awo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (NORTH)"; icon_state = "map-scrubbers"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block) -"awp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Lockup"; req_access_txt = "0"; req_one_access = null; req_one_access_txt = "2;4;66"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block) +"awp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/security{name = "Evidence Lockup"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/cell_block) "awq" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/security/brig) "awr" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/security/brig) "aws" = (/turf/simulated/wall/r_wall,/area/security/warden) @@ -1347,7 +1347,7 @@ "azU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/warden) "azV" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "azW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) -"azX" = (/turf/simulated/floor{icon_state = "dark"},/area/security/warden) +"azX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "azY" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "azZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) "aAa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHEAST)"; icon_state = "intact-scrubbers"; dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -1359,7 +1359,7 @@ "aAg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) "aAh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera{c_tag = "Head of Security Office"; dir = 1; name = "Head of Security Office"; network = list("SS13","Brig")},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/security/hos) "aAi" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/security/hos) -"aAj" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/obj/machinery/faxmachine{department = "Head of Security"},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) +"aAj" = (/obj/structure/table/woodentable,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/obj/machinery/faxmachine{department = "Bridge"},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) "aAk" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aAl" = (/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aAm" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) @@ -1481,7 +1481,7 @@ "aCy" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/brig) "aCz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/brig) "aCA" = (/obj/machinery/alarm{locked = 1; pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/brig) -"aCB" = (/turf/simulated/wall,/area/maintenance/fsmaint2) +"aCB" = (/turf/simulated/wall,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "aCC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "aCD" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard) "aCE" = (/obj/structure/window/reinforced,/obj/structure/closet/coffin,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/chapel/main) @@ -1495,12 +1495,12 @@ "aCM" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/arrival/station) "aCN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) "aCO" = (/obj/machinery/camera{c_tag = "Arrivals East"; dir = 8; name = "Arrivals East"; network = list("SS13")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) -"aCP" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/security/checkpoint2) -"aCQ" = (/obj/machinery/power/apc{dir = 1; name = "Checkpoint APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/checkpoint2) -"aCR" = (/obj/machinery/computer/security,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/checkpoint2) -"aCS" = (/obj/machinery/computer/card,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/door_control{desc = "A remote control-switch for partially locking down Arrivals."; id = "arrivals1"; name = "Arrivals Aft Lockdown"; pixel_x = 32; pixel_y = 24; req_access_txt = "19"},/obj/machinery/door_control{desc = "A remote control-switch for partially locking down Arrivals."; id = "arrivals2"; name = "Arrivals Fore Lockdown"; pixel_x = 42; pixel_y = 24; req_access_txt = "19"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/checkpoint2) -"aCT" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/checkpoint2) -"aCU" = (/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/security/checkpoint2) +"aCP" = (/obj/machinery/power/apc{dir = 1; name = "Checkpoint APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/security/checkpoint2) +"aCQ" = (/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/security/checkpoint2) +"aCR" = (/turf/simulated/floor/plating,/area/security/checkpoint2) +"aCS" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/security/checkpoint2) +"aCT" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/security/checkpoint2) +"aCU" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva) "aCV" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "aCW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) "aCX" = (/obj/machinery/vending/assist,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/storage/primary) @@ -1563,15 +1563,15 @@ "aEc" = (/obj/machinery/light,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/brig) "aEd" = (/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/security/brig) "aEe" = (/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/security/brig) -"aEf" = (/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aEg" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aEh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aEi" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aEf" = (/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"aEg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"aEh" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"aEi" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "aEj" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 25},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/turf/simulated/floor{tag = "icon-chapel (SOUTHEAST)"; icon_state = "chapel"; dir = 6},/area/chapel/main) "aEk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHWEST)"; icon_state = "intact-scrubbers"; dir = 10},/turf/simulated/floor{tag = "icon-chapel (NORTHWEST)"; icon_state = "chapel"; dir = 9},/area/chapel/main) "aEl" = (/turf/simulated/floor{tag = "icon-chapel (NORTHEAST)"; icon_state = "chapel"; dir = 5},/area/chapel/main) "aEm" = (/turf/simulated/floor{tag = "icon-chapel (SOUTHWEST)"; icon_state = "chapel"; dir = 10},/area/chapel/main) -"aEn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main) +"aEn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/chapel/main) "aEo" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/arrival/station) "aEp" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aEq" = (/obj/machinery/computer/arcade,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) @@ -1582,11 +1582,11 @@ "aEv" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/shuttle/arrival/station) "aEw" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/space,/area/shuttle/arrival/station) "aEx" = (/obj/machinery/power/apc{dir = 4; name = "Entry Hall APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable,/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) -"aEy" = (/obj/structure/closet/wardrobe/red,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/security/checkpoint2) -"aEz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/checkpoint2) -"aEA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor,/area/security/checkpoint2) -"aEB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/stool/bed/chair/office/dark,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHEAST)"; icon_state = "intact-scrubbers"; dir = 6},/turf/simulated/floor,/area/security/checkpoint2) -"aEC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/security/checkpoint2) +"aEy" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"aEz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHEAST)"; icon_state = "intact-scrubbers"; dir = 6},/turf/simulated/floor/plating,/area/security/checkpoint2) +"aEA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/checkpoint2) +"aEB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint2) +"aEC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "aED" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/security/checkpoint2) "aEE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor/plating,/area/security/checkpoint2) "aEF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1644,16 +1644,16 @@ "aFF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/crime_lab) "aFG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/crime_lab) "aFH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/crime_lab) -"aFI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aFJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aFI" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"aFJ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "aFK" = (/turf/simulated/wall,/area/library) -"aFL" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aFM" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aFL" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"aFM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/chapel/main) "aFN" = (/obj/machinery/door/airlock/maintenance{name = "Chapel Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;22"},/turf/simulated/floor/plating,/area/chapel/main) "aFO" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/turf/simulated/floor{tag = "icon-chapel (NORTHWEST)"; icon_state = "chapel"; dir = 9},/area/chapel/main) "aFP" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/turf/simulated/floor{tag = "icon-chapel (SOUTHEAST)"; icon_state = "chapel"; dir = 6},/area/chapel/main) "aFQ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{tag = "icon-chapel (NORTHEAST)"; icon_state = "chapel"; dir = 5},/area/chapel/main) -"aFR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main) +"aFR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/checkpoint2) "aFS" = (/turf/space,/area/shuttle/escape/station) "aFT" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/arrival/station) "aFU" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) @@ -1663,11 +1663,11 @@ "aFY" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space,/area/shuttle/arrival/station) "aFZ" = (/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry) "aGa" = (/obj/machinery/camera{c_tag = "Security Checkpoint"; dir = 1; name = "Security Checkpoint"; network = list("SS13","Security")},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/security/checkpoint2) -"aGb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/checkpoint2) -"aGc" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/checkpoint2) -"aGd" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/checkpoint2) -"aGe" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/checkpoint2) -"aGf" = (/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/security/checkpoint2) +"aGb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/security/checkpoint2) +"aGc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor/plating,/area/security/checkpoint2) +"aGd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/security/checkpoint2) +"aGe" = (/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/storage/primary) +"aGf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "aGg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aGh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aGi" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1723,7 +1723,7 @@ "aHg" = (/obj/machinery/alarm{locked = 1; pixel_y = 23},/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "white"},/area/security/crime_lab) "aHh" = (/obj/structure/table,/obj/item/device/reagent_scanner,/obj/structure/noticeboard{pixel_y = 28},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"},/area/security/crime_lab) "aHi" = (/obj/machinery/dnaforensics{pixel_x = -5; pixel_y = 5},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/security/crime_lab) -"aHj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aHj" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/checkpoint2) "aHk" = (/obj/machinery/door/airlock/maintenance{name = "Library Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;37"},/turf/simulated/floor/plating,/area/library) "aHl" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/library) "aHm" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/packageWrap,/turf/simulated/floor/wood,/area/library) @@ -1738,9 +1738,9 @@ "aHv" = (/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},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) "aHw" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aHx" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/entry) -"aHy" = (/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access = null; req_access_txt = "1"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/checkpoint2) -"aHz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/security/checkpoint2) -"aHA" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/window{dir = 1; name = "Security Checkpoint"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "delivery"},/area/hallway/secondary/entry) +"aHy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/hallway/secondary/entry) +"aHz" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/closet/secure_closet/brig{req_access = null; req_one_access = list(2,4,66); req_one_access_txt = "2,4,66"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) +"aHA" = (/obj/machinery/alarm{locked = 1; pixel_y = 23},/obj/structure/closet/secure_closet/brig{req_access = null; req_one_access = list(2,4,66); req_one_access_txt = "2,4,66"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) "aHB" = (/obj/structure/sign/double/map/left,/turf/simulated/wall,/area/maintenance/fpmaint2) "aHC" = (/obj/structure/sign/double/map/right,/turf/simulated/wall,/area/maintenance/fpmaint2) "aHD" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1777,10 +1777,10 @@ "aIi" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aIj" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aIk" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) -"aIl" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) +"aIl" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/structure/closet/secure_closet/brig{req_access = null; req_one_access = list(2,4,66); req_one_access_txt = "2,4,66"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) "aIm" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/brig) -"aIn" = (/obj/structure/closet/secure_closet/brig,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) -"aIo" = (/obj/machinery/alarm{locked = 1; pixel_y = 23},/obj/structure/closet/secure_closet/brig,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) +"aIn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"aIo" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Fore1"; name = "Arrivals Blast Door"; opacity = 0},/turf/simulated/floor,/area/hallway/secondary/entry) "aIp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "combrig1"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) "aIq" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/security/brig) "aIr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/security/brig) @@ -1801,7 +1801,7 @@ "aIG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "whiteblue"},/area/security/crime_lab) "aIH" = (/turf/simulated/floor{icon_state = "white"},/area/security/crime_lab) "aII" = (/obj/machinery/requests_console{announcementConsole = 0; department = "Forensic's Desk"; departmentType = 5; name = "Forensic RC"; pixel_x = 30; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/security/crime_lab) -"aIJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aIJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry) "aIK" = (/obj/structure/filingcabinet,/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/turf/simulated/floor/wood,/area/library) "aIL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/wood,/area/library) "aIM" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/camera{c_tag = "Library North"; dir = 2; name = "Library North"; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/wood,/area/library) @@ -1820,11 +1820,11 @@ "aIZ" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/arrival/station) "aJa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) "aJb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/hallway/secondary/entry) -"aJc" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/hallway/secondary/entry) +"aJc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "fore2"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/secondary/entry) "aJd" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry) "aJe" = (/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry) "aJf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry) -"aJg" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "arrivals2"; name = "Arrivals Blast Door"; opacity = 0},/turf/simulated/floor,/area/hallway/secondary/entry) +"aJg" = (/obj/structure/closet/secure_closet/brig{req_access = null; req_one_access = list(2,4,66); req_one_access_txt = "2,4,66"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) "aJh" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/camera{c_tag = "Arrivals Lounge"; dir = 2; name = "Arrivals Lounge"},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/hallway/secondary/entry) "aJi" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "aJj" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) @@ -1867,7 +1867,7 @@ "aJU" = (/obj/machinery/camera{c_tag = "Dormitory Toilets"; dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aJV" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (NORTH)"; icon_state = "map_vent_out"; dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) "aJW" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) -"aJX" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) +"aJX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/chapel/main) "aJY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "combrig1"; name = "Prison Blast Doors"; opacity = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/security/brig) "aJZ" = (/obj/structure/toilet{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/security/brig) "aKa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/security/brig) @@ -1897,7 +1897,7 @@ "aKy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/turf/simulated/floor/wood,/area/chapel/office) "aKz" = (/obj/machinery/door/airlock/glass{name = "Chapel Office"; req_access_txt = "22"},/turf/simulated/floor/wood,/area/chapel/office) "aKA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{tag = "icon-chapel (NORTHWEST)"; icon_state = "chapel"; dir = 9},/area/chapel/main) -"aKB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main) +"aKB" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Fore1"; name = "Arrivals Blast Door"; opacity = 0},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/hallway/secondary/entry) "aKC" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/arrival/station) "aKD" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/arrival/station) "aKE" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) @@ -1905,12 +1905,12 @@ "aKG" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/space,/area/shuttle/arrival/station) "aKH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aKI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) -"aKJ" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/hallway/secondary/entry) -"aKK" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) -"aKL" = (/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) -"aKM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) +"aKJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) +"aKK" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) +"aKL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) +"aKM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) "aKN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) -"aKO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "arrivals2"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) +"aKO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "fore2"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{icon_state = "neutral"},/area/hallway/secondary/entry) "aKP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHWEST)"; icon_state = "intact-scrubbers"; dir = 10},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/hallway/secondary/entry) "aKQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/storage/primary) "aKR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Primary Tool Storage"},/turf/simulated/floor,/area/storage/primary) @@ -1981,10 +1981,10 @@ "aMe" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/arrival/station) "aMf" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry) "aMg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"aMh" = (/obj/structure/stool/bed/chair/comfy/beige,/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) -"aMi" = (/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) -"aMj" = (/obj/structure/flora/pottedplant,/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) -"aMk" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) +"aMh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aMi" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access = null; req_access_txt = "1"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aMj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aMk" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor/southright{name = "Checkpoint"; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aMl" = (/obj/machinery/vending/cigarette,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/hallway/secondary/entry) "aMm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/hallway/secondary/entry) "aMn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/hallway/secondary/entry) @@ -2035,7 +2035,7 @@ "aNg" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/hallway/primary/central) "aNh" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/hallway/primary/central) "aNi" = (/obj/machinery/light/small{dir = 8},/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet) -"aNj" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) +"aNj" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor/southright{name = "Checkpoint"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aNk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "warning"},/area/security/brig) "aNl" = (/turf/simulated/floor{icon_state = "warning"},/area/security/brig) "aNm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/security/brig) @@ -2072,10 +2072,10 @@ "aNR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aNS" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/entry) "aNT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/hallway/secondary/entry) -"aNU" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) -"aNV" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/hallway/secondary/entry) -"aNW" = (/turf/simulated/floor/carpet,/area/hallway/secondary/entry) -"aNX" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) +"aNU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8; pixel_x = -3},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aNV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/obj/structure/closet/secure_closet/brig{req_access = null; req_one_access = list(2,4,66); req_one_access_txt = "2,4,66"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/brig) +"aNW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable,/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aNX" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aNY" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/hallway/secondary/entry) "aNZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/hallway/secondary/entry) "aOa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of a meteor and a spaceman. The spaceman is laughing. The meteor is exploding."; dir = 4; icon_state = "plaque"; name = "Comemmorative Plaque"; nitrogen = 30; oxygen = 70; temperature = 80},/area/hallway/secondary/entry) @@ -2223,7 +2223,7 @@ "aQM" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry) "aQN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) "aQO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/entry) -"aQP" = (/obj/structure/stool/bed/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) +"aQP" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aQQ" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/hallway/secondary/entry) "aQR" = (/turf/simulated/wall,/area/maintenance/port) "aQS" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/port) @@ -2281,8 +2281,8 @@ "aRS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) "aRT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) "aRU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Security Maintenance"; req_access_txt = null; req_one_access_txt = "4;66"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/security/crime_lab) -"aRV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aRW" = (/obj/structure/disposalpipe/segment,/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/plating,/area/maintenance/fsmaint2) +"aRV" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) +"aRW" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/machinery/door_control{id = "fore1"; name = "Fore-Port Blastdoor"; pixel_x = 26; pixel_y = 10; req_access = list(1); req_access_txt = "1"},/obj/machinery/door_control{id = "fore2"; name = "Fore-Starboard Blastdoor"; pixel_x = 26; pixel_y = 0; req_access = list(1); req_access_txt = "1"},/obj/machinery/door_control{id = "Checkpoint"; name = "Checkpoint Lockdown"; pixel_x = 26; pixel_y = -10; req_access = list(1); req_access_txt = "1"},/obj/machinery/recharger{pixel_x = 0; pixel_y = -14},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aRX" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/library) "aRY" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/library) "aRZ" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/library) @@ -2306,10 +2306,10 @@ "aSr" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry) "aSs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/hallway/secondary/entry) "aSt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry) -"aSu" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "arrivals1"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/hallway/secondary/entry) +"aSu" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aSv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry) "aSw" = (/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry) -"aSx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "arrivals1"; name = "Arrivals Blast Door"; opacity = 0},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry) +"aSx" = (/obj/machinery/computer/security,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aSy" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 1},/area/hallway/secondary/entry) "aSz" = (/obj/machinery/atm{pixel_x = 24},/turf/simulated/floor,/area/hallway/secondary/entry) "aSA" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/port) @@ -2372,7 +2372,7 @@ "aTF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/security/brig) "aTG" = (/obj/structure/table,/obj/item/weapon/storage/box/swabs{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) "aTH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/generic,/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) -"aTI" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) +"aTI" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aTJ" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) "aTK" = (/obj/structure/bookcase{name = "bookcase (Fiction)"},/turf/simulated/floor/wood,/area/library) "aTL" = (/obj/structure/bookcase{name = "bookcase (Non-Fiction)"},/turf/simulated/floor/wood,/area/library) @@ -2393,14 +2393,14 @@ "aUa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) "aUb" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) "aUc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) -"aUd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = -24},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) +"aUd" = (/obj/structure/table/reinforced,/obj/machinery/computer/guestpass,/obj/machinery/door_control{id = "aft2"; name = "aft-Starboard Blastdoor"; pixel_x = 26; pixel_y = 0; req_access = list(1); req_access_txt = "1"},/obj/machinery/door_control{id = "aft1"; name = "aft-port Blastdoor"; pixel_x = 26; pixel_y = -10; req_access = list(1); req_access_txt = "1"},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/secondary/entry) "aUe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/hallway/secondary/entry) "aUf" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/hallway/secondary/entry) -"aUg" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "arrivals1"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/hallway/secondary/entry) +"aUg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable,/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aUh" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor,/area/hallway/secondary/entry) "aUi" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor,/area/hallway/secondary/entry) "aUj" = (/obj/machinery/firealarm{dir = 2; pixel_y = -24},/turf/simulated/floor,/area/hallway/secondary/entry) -"aUk" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "arrivals1"; name = "Arrivals Blast Door"; opacity = 0},/turf/simulated/floor,/area/hallway/secondary/entry) +"aUk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aUl" = (/obj/machinery/light,/turf/simulated/floor,/area/hallway/secondary/entry) "aUm" = (/obj/machinery/camera{c_tag = "Arrivals Hallway"; dir = 8; name = "Arrivals Hallway"; network = list("SS13")},/turf/simulated/floor,/area/hallway/secondary/entry) "aUn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/port) @@ -2445,7 +2445,7 @@ "aVa" = (/obj/machinery/light{dir = 4},/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/central) "aVb" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/item/weapon/folder/blue,/turf/simulated/floor{icon_state = "dark"},/area/security/lobby) "aVc" = (/obj/structure/table,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/southright{base_state = "left"; icon_state = "left"; name = "brig reception"},/turf/simulated/floor{icon_state = "dark"},/area/security/lobby) -"aVd" = (/obj/structure/table,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/southright{icon_state = "right"; name = "brig reception"},/turf/simulated/floor{icon_state = "dark"},/area/security/lobby) +"aVd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aVe" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/item/weapon/folder/blue,/turf/simulated/floor{icon_state = "dark"},/area/security/lobby) "aVf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; layer = 2.8; name = "Brig"; req_access_txt = "63"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/security/lobby) "aVg" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/lobby) @@ -2622,8 +2622,8 @@ "aYv" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor/carpet,/area/security/detectives_office) "aYw" = (/turf/simulated/floor/carpet,/area/security/detectives_office) "aYx" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/security/detectives_office) -"aYy" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint2) -"aYz" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aYy" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Checkpoint"; name = "Checkpoint Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor/northright{name = "Checkpoint"; req_access_txt = "1"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/secondary/entry) +"aYz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "aYA" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 8; name = "Library APC"; pixel_x = -25},/turf/simulated/floor/carpet,/area/library) "aYB" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/wood,/area/library) "aYC" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/library) @@ -2839,7 +2839,7 @@ "bcE" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker) "bcF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/closet,/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (NORTH)"; icon_state = "map_vent_out"; dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker) "bcG" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker) -"bcH" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker) +"bcH" = (/obj/structure/disposalpipe/segment,/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/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) "bcI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/crew_quarters/locker) "bcJ" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/locker) "bcK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/port) @@ -2941,12 +2941,12 @@ "beC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/infirmary) "beD" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_medical{id_tag = ""; name = "Infirmary"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/security/infirmary) "beE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/brig) -"beF" = (/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; layer = 2.8; name = "Brig"; req_access_txt = "63"},/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/security/brig) -"beG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main) +"beF" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "aft1"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/hallway/secondary/entry) +"beG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "aft2"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/hallway/secondary/entry) "beH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main) -"beI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main) -"beJ" = (/obj/machinery/door/airlock/multi_tile/glass{name = "Chapel"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{tag = "icon-chapel (SOUTHWEST)"; icon_state = "chapel"; dir = 10},/area/chapel/main) -"beK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{tag = "icon-chapel (SOUTHEAST)"; icon_state = "chapel"; dir = 6},/area/chapel/main) +"beI" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/crime_lab) +"beJ" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/hallway/secondary/entry) +"beK" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "aft1"; name = "Arrivals Blast Door"; opacity = 0},/turf/simulated/floor,/area/hallway/secondary/entry) "beL" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/exit) "beM" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/hallway/secondary/exit) "beN" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/hallway/secondary/exit) @@ -3033,7 +3033,7 @@ "bgq" = (/obj/machinery/atmospherics/pipe/tank{dir = 1; icon_state = "co2_map"},/turf/simulated/floor/plating,/area/maintenance/port) "bgr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/port) "bgs" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet) -"bgt" = (/obj/machinery/light,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker) +"bgt" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "aft2"; name = "Arrivals Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/secondary/entry) "bgu" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/crew_quarters/locker) "bgv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/camera{c_tag = "Locker Room South"; dir = 8; name = "Locker Room South"; network = list("SS13")},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHWEST)"; icon_state = "intact-scrubbers"; dir = 10},/turf/simulated/floor,/area/crew_quarters/locker) "bgw" = (/obj/item/weapon/cigbutt,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/port) @@ -3210,13 +3210,13 @@ "bjL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Mess Hall"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/cafeteria) "bjM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/cafeteria) "bjN" = (/obj/structure/sign/double/barsign,/turf/simulated/wall,/area/crew_quarters/cafeteria) -"bjO" = (/obj/effect/overlay/snow{tag = "icon-snowwall_s"; icon_state = "snowwall_s"},/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"bjP" = (/obj/effect/overlay/snow{tag = "icon-snowfloor_w"; icon_state = "snowfloor_w"},/obj/effect/overlay/snow{tag = "icon-snowfloor_s"; icon_state = "snowfloor_s"},/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"bjQ" = (/obj/effect/overlay/snow,/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/obj/item/weapon/toy/xmas_cracker{pixel_x = 3; pixel_y = -3},/obj/item/weapon/toy/xmas_cracker,/obj/item/weapon/toy/xmas_cracker{pixel_x = -3; pixel_y = 3},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"bjR" = (/obj/effect/overlay/snow,/obj/structure/santa_signup_box,/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"bjS" = (/obj/effect/overlay/snow,/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"bjT" = (/obj/effect/overlay/snow{tag = "icon-snowfloor_e"; icon_state = "snowfloor_e"},/obj/effect/overlay/snow{tag = "icon-snowfloor_s"; icon_state = "snowfloor_s"},/obj/structure/reagent_dispensers/water_cooler,/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"bjU" = (/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -2; pixel_y = 0},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -2; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/obj/structure/table,/obj/structure/sign/christmas/lights{tag = "icon-xmaslights (NORTH)"; icon_state = "xmaslights"; dir = 1},/obj/item/clothing/head/festive,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) +"bjO" = (/obj/structure/table,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/southright{icon_state = "left"; name = "brig reception"},/turf/simulated/floor{icon_state = "dark"},/area/security/lobby) +"bjP" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"bjQ" = (/turf/simulated/wall/r_wall,/area/maintenance/fore{name = "Fore Starboard Maintenance"}) +"bjR" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/security/infirmary) +"bjS" = (/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker) +"bjT" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/airlock/glass_security{id_tag = "BrigFoyer"; layer = 2.8; name = "Brig"; req_access_txt = "63"},/turf/simulated/floor,/area/security/brig) +"bjU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/chapel/main) "bjV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) "bjW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) "bjX" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/wood,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) @@ -3309,9 +3309,9 @@ "blG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/stool/bed/chair/wood/normal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "blH" = (/obj/machinery/power/apc{dir = 4; name = "Cafeteria APC"; pixel_x = 24; pixel_y = 0},/obj/machinery/light{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "blI" = (/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"blJ" = (/obj/effect/overlay/snow{tag = "icon-snowfloor_s"; icon_state = "snowfloor_s"},/obj/effect/overlay/snow{tag = "icon-snowfloor_w"; icon_state = "snowfloor_w"},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"blK" = (/obj/effect/overlay/snow,/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) -"blL" = (/obj/effect/overlay/snow{tag = "icon-snowwall_e"; icon_state = "snowwall_e"},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) +"blJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/chapel/main) +"blK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-chapel (SOUTHEAST)"; icon_state = "chapel"; dir = 6},/area/chapel/main) +"blL" = (/obj/machinery/door/airlock/multi_tile/glass{name = "Chapel"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/turf/simulated/floor{tag = "icon-chapel (SOUTHWEST)"; icon_state = "chapel"; dir = 10},/area/chapel/main) "blM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) "blN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) "blO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) @@ -3347,7 +3347,7 @@ "bms" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bmt" = (/obj/machinery/light_switch{pixel_x = -5; pixel_y = 28},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bmu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/assembly/chargebay) -"bmv" = (/obj/machinery/door_control{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24},/obj/machinery/camera{c_tag = "Research Division Mech Bay"; dir = 2; network = list("SS13","Research")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/assembly/chargebay) +"bmv" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker) "bmw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHWEST)"; icon_state = "intact-scrubbers"; dir = 10},/turf/simulated/floor,/area/assembly/chargebay) "bmx" = (/turf/simulated/floor,/area/assembly/chargebay) "bmy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/assembly/chargebay) @@ -3355,7 +3355,7 @@ "bmA" = (/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bmB" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bmC" = (/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/obj/structure/table,/obj/machinery/camera{c_tag = "Research Division West"; dir = 2; network = list("SS13","Research")},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) -"bmD" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/item/weapon/retractor,/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/stack/nanopaste{amount = 1; pixel_x = 3},/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/weapon/surgicaldrill,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/cautery{pixel_y = 4},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) +"bmD" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/office) "bmE" = (/obj/structure/morgue{dir = 2; icon_state = "morgue1"; pixel_x = 4; tag = "icon-morgue1"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bmF" = (/turf/simulated/wall/r_wall,/area/assembly/robotics) "bmG" = (/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/hallway/primary/starboard) @@ -3403,8 +3403,8 @@ "bnw" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "bnx" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/turf/simulated/floor,/area/hallway/primary/central) "bny" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (NORTH)"; icon_state = "map-scrubbers"; dir = 1},/turf/simulated/floor,/area/hallway/primary/central) -"bnz" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (NORTH)"; icon_state = "map-scrubbers"; dir = 1},/obj/effect/overlay/snow{tag = "icon-snowwall_s"; icon_state = "snowwall_s"},/turf/simulated/floor,/area/hallway/primary/central) -"bnA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/effect/overlay/snow{tag = "icon-snowwall_s"; icon_state = "snowwall_s"},/turf/simulated/floor,/area/hallway/primary/central) +"bnz" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) +"bnA" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) "bnB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/hallway/primary/central) "bnC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central) "bnD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor,/area/hallway/primary/central) @@ -3687,8 +3687,8 @@ "bsU" = (/obj/structure/sign/greencross{name = "Medbay"; pixel_x = -32},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/reception) "bsV" = (/obj/machinery/computer/crew,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "green"},/area/medical/reception) "bsW" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor,/area/medical/reception) -"bsX" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -6; pixel_y = -4; range = 4; req_access_txt = "5"},/obj/machinery/computer/guestpass{pixel_y = 32},/turf/simulated/floor,/area/medical/reception) -"bsY" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/obj/machinery/door_control{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access_txt = "5"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = -4; range = 4; req_access_txt = "5"},/turf/simulated/floor,/area/medical/reception) +"bsX" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -2; pixel_y = 0},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -2; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness{name = "\improper Holodeck Control"}) +"bsY" = (/obj/machinery/door_control{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24},/obj/machinery/camera{c_tag = "Research Division West"; dir = 2; network = list("SS13","Research")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/assembly/chargebay) "bsZ" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Emergency Medical Tech"},/turf/simulated/floor,/area/medical/reception) "bta" = (/obj/structure/filingcabinet/filingcabinet,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/reception) "btb" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (SOUTHEAST)"; icon_state = "intact-scrubbers"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/reception) @@ -3852,7 +3852,7 @@ "bwd" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/adv{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/machinery/camera{c_tag = "Medbay Drug Storage"; name = "Medbay Drug Storage"; network = list("SS13","Medical")},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bwe" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bwf" = (/obj/machinery/power/apc{dir = 4; name = "Chemistry APC"; pixel_x = 26; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) -"bwg" = (/obj/machinery/door/firedoor/multi_tile,/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; name = "Medical Bay"; req_access_txt = "5"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "warning"},/area/medical/medbay2) +"bwg" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/item/weapon/retractor,/obj/item/weapon/hemostat{pixel_y = 4},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bwh" = (/turf/simulated/floor{icon_state = "warning"},/area/medical/medbay2) "bwi" = (/turf/simulated/wall,/area/medical/medbay2) "bwj" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/medical/medbay2) @@ -3866,7 +3866,7 @@ "bwr" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/assembly/chargebay) "bws" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/assembly/chargebay) "bwt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/assembly/chargebay) -"bwu" = (/obj/machinery/door/window/westleft{base_state = "right"; icon_state = "right"; req_access_txt = "29, 47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/assembly/chargebay) +"bwu" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (NORTH)"; icon_state = "map-scrubbers"; dir = 1},/turf/simulated/floor,/area/hallway/primary/central) "bwv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor,/area/assembly/chargebay) "bww" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/assembly/chargebay) "bwx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/assembly/chargebay) @@ -4019,7 +4019,7 @@ "bzo" = (/turf/simulated/floor/plating,/area/medical/genetics) "bzp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/mob/living/carbon/monkey/tajara,/turf/simulated/floor/plating,/area/medical/genetics) "bzq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/medical/genetics) -"bzr" = (/obj/machinery/recharge_station,/obj/machinery/camera{dir = 4},/turf/simulated/floor,/area/assembly/chargebay) +"bzr" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/medical/morgue) "bzs" = (/obj/machinery/recharge_station,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/assembly/chargebay) "bzt" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/assembly/chargebay) "bzu" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{icon_state = "bot"},/area/assembly/chargebay) @@ -4052,7 +4052,7 @@ "bzV" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/research/station) "bzW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/quartermaster/storage) "bzX" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/quartermaster/storage) -"bzY" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 4; name = "Cargo Recieving Dock"},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; req_one_access_txt = "13;31"; tag_door = "cargo_bay_door"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) +"bzY" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -6; pixel_y = -4; range = 4; req_access_txt = "5"; step_y = 0},/obj/machinery/computer/guestpass{pixel_y = 32},/turf/simulated/floor,/area/medical/reception) "bzZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/storage) "bAa" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/vehicle/train/cargo/trolley,/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) "bAb" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/turf/simulated/floor,/area/quartermaster/office) @@ -4429,7 +4429,7 @@ "bHi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"},/area/medical/genetics_cloning) "bHj" = (/obj/structure/table,/obj/item/weapon/book/manual/medical_cloning{pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/medical/genetics) "bHk" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bHl" = (/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/medical/genetics) +"bHl" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/obj/machinery/door_control{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access_txt = "5"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = -4; range = 4; req_access_txt = "5"; step_y = 0},/turf/simulated/floor,/area/medical/reception) "bHm" = (/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) "bHn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) "bHo" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_medsci,/obj/item/device/flashlight/pen{pixel_x = 0},/obj/item/device/flashlight/pen{pixel_x = 4; pixel_y = 3},/obj/machinery/requests_console{department = "Genetics"; departmentType = 0; name = "Genetics Requests Console"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) @@ -4567,7 +4567,7 @@ "bJQ" = (/obj/machinery/body_scanconsole{density = 0},/turf/simulated/floor{dir = 8; icon_state = "whiteblue"},/area/medical/sleeper) "bJR" = (/obj/machinery/computer/med_data,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper) "bJS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/medbay2) -"bJT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/item/weapon/paper/bioprinter,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{layer = 4.1},/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/medical/genetics) +"bJT" = (/obj/machinery/door/firedoor/multi_tile,/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; name = "Medical Bay"; req_access_txt = "5"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/medbay2) "bJU" = (/obj/machinery/camera{c_tag = "Genetics Research"; dir = 4; name = "Genetics Research"; network = list("SS13","Research")},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) "bJV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/retractor{pixel_y = 6},/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) "bJW" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/bonesetter,/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) @@ -4692,7 +4692,7 @@ "bMl" = (/obj/structure/stool/bed/chair/comfy/brown,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 16; pixel_y = 32},/turf/simulated/floor{icon_state = "bcarpet01"},/area/medical/medbreak) "bMm" = (/obj/structure/stool/bed/chair/comfy/brown,/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/medbreak) "bMn" = (/obj/item/device/radio/intercom{dir = 1; layer = 4; name = "Station Intercom (General)"; pixel_y = 23},/turf/simulated/floor{icon_state = "bcarpet03"},/area/medical/medbreak) -"bMo" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/medbreak) +"bMo" = (/obj/machinery/door/window/westleft{req_access_txt = "29, 47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/assembly/chargebay) "bMp" = (/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/medbreak) "bMq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/medbreak) "bMr" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/medical_diagnostics_manual{pixel_y = 8},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 4; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Break Room Emergency Phone"},/obj/machinery/light{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/medbreak) @@ -4709,11 +4709,11 @@ "bMC" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (NORTH)"; icon_state = "map_vent_out"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/surgery) "bMD" = (/obj/structure/table,/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/circular_saw,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{dir = 10; icon_state = "whitepurple"},/area/medical/genetics) "bME" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) -"bMF" = (/obj/machinery/optable/lifesupport,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) +"bMF" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/storage) "bMG" = (/obj/machinery/computer/operating,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) "bMH" = (/obj/structure/closet/secure_closet/medical2{req_access = 29},/turf/simulated/floor{dir = 6; icon_state = "whitepurple"},/area/medical/genetics) "bMI" = (/turf/simulated/floor/engine,/area/toxins/telesci) -"bMJ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/toxins/telesci) +"bMJ" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/assembly/chargebay) "bMK" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/engine,/area/toxins/telesci) "bML" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/storage) "bMM" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/storage) @@ -4809,7 +4809,7 @@ "bOy" = (/obj/item/device/assembly/signaler{pixel_x = 0; pixel_y = 8},/obj/item/device/assembly/signaler{pixel_x = -8; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = 6; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = -2; pixel_y = -2},/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bOz" = (/obj/item/device/assembly/timer{pixel_x = 5; pixel_y = 4},/obj/item/device/assembly/timer{pixel_x = -4; pixel_y = 2},/obj/item/device/assembly/timer{pixel_x = 6; pixel_y = -4},/obj/item/device/assembly/timer{pixel_x = 0; pixel_y = 0},/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bOA" = (/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 5},/obj/item/device/transfer_valve{pixel_x = 5},/obj/structure/table,/obj/machinery/alarm{locked = 1; pixel_y = 23},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) -"bOB" = (/obj/structure/dispenser,/obj/machinery/camera,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bOB" = (/obj/machinery/camera{c_tag = "Dormitory Toilets"; dir = 1},/turf/simulated/floor,/area/assembly/chargebay) "bOC" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/rnd/mixing) "bOD" = (/obj/machinery/driver_button{dir = 2; id = "toxinsdriver"; pixel_y = 24},/turf/simulated/floor,/area/rnd/mixing) "bOE" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins Test Area"); pixel_x = 32; pixel_y = 0},/turf/simulated/floor,/area/rnd/mixing) @@ -5134,7 +5134,7 @@ "bUL" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the singularity chamber."; dir = 8; layer = 4; name = "Singularity Engine Telescreen"; network = list("Singularity"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/atmos) "bUM" = (/obj/machinery/power/monitor,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/atmos) "bUN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24;12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.6; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) -"bUO" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/wall/r_wall,/area/atmos) +"bUO" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 4; name = "Cargo Recieving Dock"},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; req_one_access_txt = "13;31"; step_x = 0; tag_door = "cargo_bay_door"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "bUP" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bUQ" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; listening = 0; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Medbay Center"; dir = 4; name = "Medbay Center"; network = list("SS13","Medical")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/medbay2) "bUR" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor,/area/medical/surgery) @@ -5196,13 +5196,13 @@ "bVV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) "bVW" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/pipedispenser,/turf/simulated/floor,/area/atmos) "bVX" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) -"bVY" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 1},/turf/simulated/floor,/area/atmos) -"bVZ" = (/obj/machinery/camera{c_tag = "Atmospherics North"; name = "Atmospherics North"; network = list("SS13","Engineering")},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) -"bWa" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/firealarm{name = "Fire alarm"; pixel_y = 28},/turf/simulated/floor,/area/atmos) -"bWb" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor,/area/atmos) -"bWc" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor,/area/atmos) -"bWd" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/purple,/turf/simulated/floor,/area/atmos) -"bWe" = (/obj/machinery/atmospherics/unary/freezer{set_temperature = 1; dir = 8; icon_state = "freezer_0"; use_power = 1; req_access = 56},/turf/simulated/floor,/area/atmos) +"bVY" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/medical/genetics) +"bVZ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/qm) +"bWa" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/obj/item/weapon/paper/bioprinter,/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/medical/genetics) +"bWb" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/miningdock) +"bWc" = (/obj/structure/noticeboard{pixel_y = 32},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/medbreak) +"bWd" = (/obj/machinery/optable,/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/genetics) +"bWe" = (/obj/machinery/camera{c_tag = "Misc Test Chamber"; dir = 2; name = "Misc Test Chamber"; network = list("SS13","Research"); pixel_x = 0},/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/toxins/telesci) "bWf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "bWg" = (/obj/machinery/vending/coffee,/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/medical/medbay2) "bWh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/medical/medbay2) @@ -5259,11 +5259,11 @@ "bXg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/atmos) "bXh" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor,/area/atmos) "bXi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) -"bXj" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Ports to Waste"},/turf/simulated/floor,/area/atmos) +"bXj" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/rnd/mixing) "bXk" = (/turf/simulated/floor,/area/atmos) -"bXl" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Pure to Waste"},/turf/simulated/floor,/area/atmos) -"bXm" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 8},/obj/machinery/meter{id = "wloop_atm_meter"},/turf/simulated/floor,/area/atmos) -"bXn" = (/obj/machinery/camera{c_tag = "Atmospherics North-East"; dir = 8; name = "Atmospherics North-East"; network = list("SS13","Engineering")},/obj/machinery/atmospherics/unary/heater{dir = 8},/turf/simulated/floor,/area/atmos) +"bXl" = (/obj/structure/dispenser,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bXm" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) +"bXn" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bXo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "bXp" = (/obj/structure/lattice,/turf/space,/area/atmos) "bXq" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) @@ -5322,9 +5322,9 @@ "bYr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/atmos) "bYs" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor,/area/atmos) "bYt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor/plating,/area/atmos) -"bYu" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/atmos) +"bYu" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bYv" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor,/area/atmos) -"bYw" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Pure to Mix"},/turf/simulated/floor,/area/atmos) +"bYw" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.6; name = "Atmos Blast Door"; opacity = 0},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24;12"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/atmos) "bYx" = (/obj/machinery/atmospherics/valve/digital{pipe_color = "yellow"; dir = 4; name = "Gas Mix Inlet Valve"},/turf/simulated/floor{icon_state = "green"; dir = 6},/area/atmos) "bYy" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "bYz" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/space,/area/atmos) @@ -5379,7 +5379,7 @@ "bZw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/atmos) "bZx" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/atmos) "bZy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/atmos) -"bZz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/atmos) +"bZz" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "bZA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor,/area/atmos) "bZB" = (/obj/machinery/atmospherics/binary/pump/on{name = "Waste In"},/turf/simulated/floor,/area/atmos) "bZC" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank")},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/atmos) @@ -5442,10 +5442,10 @@ "caH" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/atmos) "caI" = (/obj/machinery/atmospherics/pipe/manifold/visible{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor,/area/atmos) "caJ" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/atmos) -"caK" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Port"},/turf/simulated/floor,/area/atmos) +"caK" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor,/area/atmos) "caL" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) -"caM" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) -"caN" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) +"caM" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/firealarm{name = "Fire alarm"; pixel_y = 28},/turf/simulated/floor,/area/atmos) +"caN" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/camera{c_tag = "Xenobiology Module North"; dir = 2; network = list("SS13","Research"); pixel_x = 0},/turf/simulated/floor,/area/atmos) "caO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/valve/digital{pipe_color = "yellow"; dir = 4; name = "Gas Mix Outlet Valve"},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/atmos) "caP" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "caQ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/space,/area/atmos) @@ -5547,9 +5547,9 @@ "ccI" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/window/plasmareinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/misc_lab) "ccJ" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "ccK" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"ccL" = (/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"ccL" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/atmos) "ccM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"ccN" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"ccN" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{dir = 1; layer = 4; name = "Station Intercom (General)"; pixel_y = 23},/turf/simulated/floor,/area/atmos) "ccO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/rnd/test_area) "ccP" = (/obj/item/clothing/mask/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area) "ccQ" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless,/area/rnd/test_area) @@ -5645,7 +5645,7 @@ "ceC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) "ceD" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Air to Ports"},/turf/simulated/floor,/area/atmos) "ceE" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4; icon_state = "intact"; level = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) -"ceF" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor,/area/atmos) +"ceF" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor,/area/atmos) "ceG" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/atmos) "ceH" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor{icon_state = "escape"; dir = 4},/area/atmos) "ceI" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) @@ -5688,13 +5688,13 @@ "cft" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/closet/firecloset,/turf/simulated/floor,/area/atmos) "cfu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/closet/firecloset,/turf/simulated/floor,/area/atmos) "cfv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/binary/pump/on{dir = 4; name = "External In"},/turf/simulated/floor,/area/atmos) -"cfw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/visible/purple{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor,/area/atmos) +"cfw" = (/obj/machinery/atmospherics/binary/pump/on{name = "Scrubber to Waste"},/turf/simulated/floor,/area/atmos) "cfx" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/atmos) "cfy" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/atmos) "cfz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cfA" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor,/area/atmos) "cfB" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/floor,/area/atmos) -"cfC" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Nitrus to Pure"},/turf/simulated/floor,/area/atmos) +"cfC" = (/obj/machinery/atmospherics/unary/freezer,/turf/simulated/floor,/area/atmos) "cfD" = (/obj/machinery/atmospherics/valve/digital{pipe_color = "yellow"; dir = 4; name = "N2O Outlet Valve"},/turf/simulated/floor{icon_state = "escape"; dir = 5},/area/atmos) "cfE" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "cfF" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; pressure_checks = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/engine/n20,/area/atmos) @@ -5710,7 +5710,7 @@ "cfP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/medbay2) "cfQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/medbay2) "cfR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 5; icon_state = "whitegreen"; tag = "icon-whitegreen (NORTHWEST)"},/area/medical/medbay2) -"cfS" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Patient Wing Maintenance Access"; req_access_txt = "5"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/medical/medbay2) +"cfS" = (/obj/machinery/atmospherics/unary/heater,/turf/simulated/floor,/area/atmos) "cfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/rnd/xenobiology) "cfU" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (EAST)"; icon_state = "map_vent_out"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) "cfV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology) @@ -5759,8 +5759,8 @@ "cgM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Storage"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) "cgN" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/atmos) "cgO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/atmos) -"cgP" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/camera{c_tag = "Atmospherics Ports"; dir = 4; name = "Atmospherics Ports"; network = list("SS13","Engineering")},/turf/simulated/floor,/area/atmos) -"cgQ" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/atmos) +"cgP" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Pure to Mix"},/turf/simulated/floor,/area/atmos) +"cgQ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact (NORTHWEST)"},/turf/simulated/floor,/area/atmos) "cgR" = (/obj/machinery/light{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/atmos) "cgS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cgT" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5787,7 +5787,7 @@ "cho" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "chp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "chq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) -"chr" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"chr" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/ward) "chs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) "cht" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/machinery/door/window/southright{tag = "icon-left (WEST)"; name = "Test Chamber"; icon_state = "left"; dir = 8; req_access_txt = "47"},/turf/simulated/floor/engine,/area/rnd/misc_lab) "chu" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/engine,/area/rnd/misc_lab) @@ -5820,7 +5820,7 @@ "chV" = (/obj/machinery/conveyor{dir = 4; id = "atmosbelt"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/atmos) "chW" = (/obj/machinery/conveyor_switch{id = "atmosbelt"; pixel_x = -10; pixel_y = 19},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/atmos) "chX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor,/area/atmos) -"chY" = (/obj/machinery/atmospherics/omni/filter{name = "Plasma Filter"; tag_east = 6; tag_north = 1; tag_south = 2},/turf/simulated/floor,/area/atmos) +"chY" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor,/area/atmos) "chZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/atmos) "cia" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "cib" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "on"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/engine/plasma,/area/atmos) @@ -5868,9 +5868,9 @@ "ciR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/crew_quarters/sleep/engi) "ciS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/sleep/engi) "ciT" = (/obj/machinery/door_control{id = "atmoshatch"; name = "Atmospherics Delivery Hatch"; pixel_x = -25; pixel_y = 0; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/atmos) -"ciU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor,/area/atmos) +"ciU" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/atmos) "ciV" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor,/area/atmos) -"ciW" = (/obj/machinery/atmospherics/unary/heater{dir = 8},/turf/simulated/floor,/area/atmos) +"ciW" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor,/area/atmos) "ciX" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"; sensors = list("tox_sensor" = "Tank")},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/atmos) "ciY" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/engine/plasma,/area/atmos) "ciZ" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine/plasma,/area/atmos) @@ -5930,9 +5930,9 @@ "ckb" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/obj/structure/closet/wardrobe/engineering_yellow,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "ckc" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/secure/safe{pixel_x = 10; pixel_y = 25},/obj/item/weapon/bedsheet/orange,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "ckd" = (/obj/machinery/light{dir = 8},/obj/machinery/camera{c_tag = "Atmospherics West"; dir = 4; name = "Atmospherics West"; network = list("SS13","Engineering")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/atmos) -"cke" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/turf/simulated/floor,/area/atmos) -"ckf" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Port In"},/turf/simulated/floor,/area/atmos) -"ckg" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Plasma to Pure"},/turf/simulated/floor,/area/atmos) +"cke" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/binary/pump/on{name = "Waste In"},/turf/simulated/floor,/area/atmos) +"ckf" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor,/area/atmos) +"ckg" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/turf/simulated/floor,/area/atmos) "ckh" = (/obj/machinery/camera{c_tag = "Atmospherics East"; dir = 8; name = "Atmospherics East"; network = list("SS13","Engineering")},/obj/machinery/atmospherics/valve/digital{pipe_color = "yellow"; dir = 4; name = "Plasma Outlet Valve"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/atmos) "cki" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; pressure_checks = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/engine/plasma,/area/atmos) "ckj" = (/obj/machinery/power/apc{dir = 8; name = "Chief Medical Officer's Office APC"; pixel_x = -26; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/mob/living/simple_animal/cat/Runtime,/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/cmo) @@ -5988,10 +5988,10 @@ "clh" = (/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/atmos) "cli" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/turf/simulated/floor,/area/atmos) "clj" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor,/area/atmos) -"clk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/atmos) +"clk" = (/obj/machinery/atmospherics/binary/pump{dir = 6; name = "Pure to Port"},/turf/simulated/floor,/area/atmos) "cll" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor,/area/atmos) "clm" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/atmos) -"cln" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Port Out"},/turf/simulated/floor,/area/atmos) +"cln" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor,/area/atmos) "clo" = (/turf/space,/area/atmos) "clp" = (/obj/machinery/newscaster{pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/turf/simulated/floor{icon_state = "bcarpet01"},/area/medical/cmo) "clq" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/cmo) @@ -6030,12 +6030,12 @@ "clX" = (/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "clY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "clZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) -"cma" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) -"cmb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/atmos) -"cmc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Distribution"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos) -"cmd" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/atmos) +"cma" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Pure to Waste"},/turf/simulated/floor,/area/atmos) +"cmb" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "Aft Starboard Solar Access"; dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"cmc" = (/obj/machinery/camera{c_tag = "Misc Research Chamber"; dir = 2; network = list("SS13","Research")},/turf/simulated/floor/engine,/area/rnd/misc_lab) +"cmd" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor,/area/atmos) "cme" = (/obj/machinery/atmospherics/omni/filter{name = "CO2 Filter"; tag_east = 5; tag_north = 1; tag_south = 2},/turf/simulated/floor,/area/atmos) -"cmf" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/atmos) +"cmf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 9},/turf/simulated/floor,/area/atmos) "cmg" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1441; icon_state = "on"; id = "co2_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cmh" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cmi" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/hologram/holopad,/obj/machinery/camera{c_tag = "Chief Medical Office"; dir = 4; network = list("SS13","Medical")},/turf/simulated/floor{icon_state = "bcarpet04"},/area/medical/cmo) @@ -6092,11 +6092,11 @@ "cnh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "cni" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "cnj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTHWEST)"; icon_state = "intact-scrubbers"; dir = 9},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) -"cnk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/wall/r_wall,/area/atmos) -"cnl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/atmos) -"cnm" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Distro to Waste"},/turf/simulated/floor,/area/atmos) -"cnn" = (/obj/machinery/atmospherics/valve/open,/turf/simulated/floor,/area/atmos) -"cno" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) +"cnk" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Nitrus to Pure"},/turf/simulated/floor,/area/atmos) +"cnl" = (/obj/machinery/door/airlock/maintenance{name = "Medbay Patient Wing Maintenance Access"; req_access_txt = "5"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/medical/medbay2) +"cnm" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/camera{c_tag = "South Solars"; dir = 4; network = list("Tcomsat")},/turf/simulated/floor,/area/atmos) +"cnn" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab) +"cno" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/atmos) "cnp" = (/obj/machinery/atmospherics/binary/pump{name = "Air to Pure"},/turf/simulated/floor,/area/atmos) "cnq" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; sensors = list("co2_sensor" = "Tank")},/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/atmos) "cnr" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) @@ -6145,11 +6145,11 @@ "coi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "coj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cok" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) -"col" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) -"com" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor,/area/atmos) -"con" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/machinery/meter{id = "dloop_atm_meter"},/turf/simulated/floor,/area/atmos) -"coo" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Distro"},/turf/simulated/floor,/area/atmos) -"cop" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9; icon_state = "intact"; level = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) +"col" = (/obj/item/device/radio/intercom{dir = 1; layer = 4; name = "Station Intercom (General)"; pixel_y = 23},/turf/simulated/floor,/area/atmos) +"com" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor,/area/atmos) +"con" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Distro"},/turf/simulated/floor,/area/atmos) +"coo" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/atmos) +"cop" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/turf/simulated/floor,/area/atmos) "coq" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 1},/turf/simulated/floor,/area/atmos) "cor" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor,/area/atmos) "cos" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Carbon to Pure"},/turf/simulated/floor,/area/atmos) @@ -6198,14 +6198,14 @@ "cpj" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 1},/obj/item/weapon/storage/secure/safe{pixel_y = -25},/obj/item/weapon/bedsheet/orange,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cpk" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cpl" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/secure/safe{pixel_x = 10; pixel_y = -25},/obj/item/weapon/bedsheet/orange,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) -"cpm" = (/obj/machinery/camera{c_tag = "Atmospherics Distribution"; dir = 4; name = "Atmospheric Distrobution"; network = list("SS13","Engineering")},/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/portables_connector{layer = 2},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/atmos) +"cpm" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Plasma to Pure"},/turf/simulated/floor,/area/atmos) "cpn" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; icon_state = "map_on"; name = "Air to Distro"; tag = "icon-map_on (NORTH)"},/turf/simulated/floor,/area/atmos) -"cpo" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) -"cpp" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor,/area/atmos) +"cpo" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) +"cpp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi) "cpq" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) "cpr" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor,/area/atmos) "cps" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) -"cpt" = (/obj/machinery/atmospherics/omni/filter{name = "O2/N2 Filter"; tag_east = 4; tag_north = 1; tag_south = 2; tag_west = 3},/turf/simulated/floor,/area/atmos) +"cpt" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor,/area/atmos) "cpu" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green{dir = 10},/turf/simulated/floor,/area/atmos) "cpv" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/medical/cmo) "cpw" = (/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access_txt = "5"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -6237,14 +6237,14 @@ "cpW" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/engi) "cpX" = (/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/door/airlock/glass_engineering{req_access_txt = "32"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; layer = 2.5; name = "Engineering Lockdown Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/crew_quarters/sleep/engi) "cpY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/engi) -"cpZ" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/high; dir = 8; name = "Atmospherics APC"; pixel_x = -24},/obj/structure/cable,/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Air Port"},/turf/simulated/floor,/area/atmos) +"cpZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/camera{c_tag = "Isolation Room Two"; dir = 8; network = list("Anomaly Isolation")},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/atmos) "cqa" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/atmos) -"cqb" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) +"cqb" = (/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/obj/machinery/camera{c_tag = "South Solars"; dir = 4; network = list("Tcomsat")},/turf/simulated/floor,/area/atmos) "cqc" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Oxygen to Pure"},/turf/simulated/floor,/area/atmos) "cqd" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/atmos) -"cqe" = (/obj/machinery/atmospherics/omni/mixer{tag_east = 1; tag_east_con = 0.8; tag_north = 2; tag_west = 1; tag_west_con = 0.2},/turf/simulated/floor,/area/atmos) +"cqe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cqf" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) -"cqg" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/binary/pump{desc = "Nitrogen to Pure"; dir = 1; name = "Nitrogen to Pure"},/turf/simulated/floor,/area/atmos) +"cqg" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "cqh" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/atmos) "cqi" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Unfilter to Vent"; pipe_color = "yellow"},/turf/simulated/floor,/area/atmos) "cqj" = (/obj/structure/lattice,/obj/machinery/atmospherics/unary/outlet_injector{dir = 8; frequency = 1443; icon_state = "on"; id = ""; use_power = 1},/turf/space,/area/atmos) @@ -6299,14 +6299,14 @@ "crg" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/shower{pixel_y = 15},/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) "crh" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) "cri" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/engine/dock) -"crj" = (/obj/machinery/atmospherics/valve/digital{name = "Mixed Air Outlet Valve"; openDuringInit = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/turf/simulated/floor,/area/atmos) +"crj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/atmos) "crk" = (/obj/machinery/atmospherics/valve/digital/open{name = "Mixed Air Valve"},/turf/simulated/floor{icon_state = "arrival"; dir = 6},/area/atmos) "crl" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/turf/simulated/floor{icon_state = "arrival"},/area/atmos) -"crm" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/atmos) +"crm" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "crn" = (/obj/machinery/light,/obj/machinery/atmospherics/valve/digital{name = "Oxygen Outlet Valve"; openDuringInit = 1},/turf/simulated/floor,/area/atmos) "cro" = (/obj/machinery/atmospherics/valve/digital/open,/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/atmos) "crp" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/atmos) -"crq" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/atmos) +"crq" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor,/area/atmos) "crr" = (/obj/machinery/atmospherics/valve/digital{name = "Nitrogen Outlet Valve"; openDuringInit = 1},/turf/simulated/floor,/area/atmos) "crs" = (/obj/machinery/atmospherics/valve/digital/open,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/atmos) "crt" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor{icon_state = "red"},/area/atmos) @@ -6358,10 +6358,10 @@ "csn" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted,/obj/machinery/door/window/westright{name = "Engineering Shower"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteyellowcorner"},/area/crew_quarters/sleep_male/toilet_male{name = "\improper Engineering Washroom"}) "cso" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space) "csp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space) -"csq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) -"csr" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) +"csq" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor,/area/atmos) +"csr" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/turf/simulated/floor,/area/atmos) "css" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) -"cst" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/wall/r_wall,/area/atmos) +"cst" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) "csu" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "csv" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 4; icon_state = "map"; tag = "icon-map (WEST)"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "csw" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) @@ -6613,7 +6613,7 @@ "cxi" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft) "cxj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft) "cxk" = (/turf/simulated/wall/r_wall,/area/engine/storage_hard) -"cxl" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Storage APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/table/reinforced{icon_state = "table"},/obj/item/device/magnetic_lock/engineering{pixel_x = 5; pixel_y = -5},/obj/item/device/magnetic_lock/engineering,/obj/item/device/magnetic_lock/engineering{pixel_x = -5; pixel_y = 5},/turf/simulated/floor,/area/engine/storage) +"cxl" = (/obj/machinery/atmospherics/omni/mixer,/turf/simulated/floor,/area/atmos) "cxm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/turf/simulated/floor,/area/engine/storage) "cxn" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor,/area/engine/storage) "cxo" = (/obj/structure/table,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/cable_coil,/obj/item/weapon/cable_coil,/obj/item/clothing/glasses/welding,/obj/item/weapon/book/manual/supermatter_engine,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (WEST)"; icon_state = "map_scrubber_on"; dir = 8},/turf/simulated/floor,/area/engine/storage) @@ -6724,7 +6724,7 @@ "czp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/engine/dock) "czq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/engine/dock) "czr" = (/obj/machinery/light{dir = 1},/obj/machinery/suit_cycler/engineering,/turf/simulated/floor,/area/engine/dock) -"czs" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/machinery/camera,/turf/simulated/floor,/area/engine/dock) +"czs" = (/obj/machinery/atmospherics/binary/pump{desc = "Nitrogen to Pure"; dir = 1; name = "Nitrogen to Pure"},/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/atmos) "czt" = (/turf/simulated/floor,/area/engine/dock) "czu" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "engineering_aux_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 6; icon_state = "intact"; level = 2},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "engineering_aux_airlock"; name = "interior access button"; pixel_x = -10; pixel_y = -20; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/dock) "czv" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/engine/dock) @@ -9644,7 +9644,7 @@ "dDx" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/tcommsat/entrance) "dDy" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor,/area/tcommsat/entrance) "dDz" = (/obj/structure/sign/vacuum,/turf/simulated/wall/r_wall,/area/tcommsat/entrance) -"dDA" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/tcommsat/entrance) +"dDA" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/camera{c_tag = "Research Division North"; dir = 1; network = list("SS13","Research")},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/atmos) "dDB" = (/obj/item/weapon/cell,/turf/simulated/floor,/area/tcommsat/entrance) "dDC" = (/obj/structure/closet/malf/suits,/turf/simulated/floor,/area/tcommsat/entrance) "dDD" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1381; master_tag = "telecoms_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/space) @@ -10512,7 +10512,7 @@ "dUh" = (/obj/machinery/conveyor{dir = 1; id = "anolaser"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/anomaly) "dUi" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.6; name = "Firelock North"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/research_outpost/hallway) "dUj" = (/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.6; name = "Firelock North"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/research_outpost/hallway) -"dUk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 8; name = "Outpost Atmospherics APC"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plating,/area/research_outpost/atmos) +"dUk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/turf/simulated/floor/plating,/area/atmos) "dUl" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/unary/freezer,/turf/simulated/floor/plating,/area/research_outpost/atmos) "dUm" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/unary/heater,/turf/simulated/floor/plating,/area/research_outpost/atmos) "dUn" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/research_outpost/atmos) @@ -10538,11 +10538,11 @@ "dUH" = (/obj/machinery/conveyor_switch{id = "anolaser"},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "dUI" = (/obj/machinery/conveyor{dir = 1; id = "anolaser"},/obj/structure/plasticflaps,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/anomaly) "dUJ" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/research_outpost/hallway) -"dUK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) -"dUL" = (/obj/machinery/door/airlock/atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{tag = "icon-map_universal (EAST)"; icon_state = "map_universal"; dir = 4},/turf/simulated/floor/plating,/area/research_outpost/atmos) -"dUM" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/research_outpost/atmos) -"dUN" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/research_outpost/atmos) -"dUO" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/research_outpost/atmos) +"dUK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/atmos) +"dUL" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.5; name = "Atmos Blast Door"; opacity = 0; open_layer = 2.5},/obj/structure/window/reinforced{dir = 1},/turf/simulated/wall/r_wall,/area/atmos) +"dUM" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Storage APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/table,/obj/item/device/magnetic_lock/engineering{pixel_x = 5; pixel_y = -5},/obj/item/device/magnetic_lock/engineering,/obj/item/device/magnetic_lock/engineering{pixel_x = -5; pixel_y = 5},/turf/simulated/floor,/area/engine/storage) +"dUN" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor,/area/engine/dock) +"dUO" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/tcommsat/entrance) "dUP" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plating,/area/research_outpost/atmos) "dUQ" = (/obj/machinery/atmospherics/trinary/filter/m_filter{tag = "icon-mmap (EAST)"; icon_state = "mmap"; dir = 4},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dUR" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/turf/simulated/floor/plating,/area/research_outpost/atmos) @@ -10571,9 +10571,9 @@ "dVo" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "delivery"},/area/research_outpost/anomaly) "dVp" = (/obj/machinery/conveyor{dir = 1; id = "anolaser"},/obj/machinery/door/window/westleft{dir = 2; layer = 3.1; name = "laser testing"; req_access_txt = "65"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/research_outpost/anomaly) "dVq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "whitepurplecorner"},/area/research_outpost/hallway) -"dVr" = (/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) +"dVr" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) "dVs" = (/turf/simulated/wall/r_wall,/area/research_outpost/power) -"dVt" = (/obj/machinery/door/airlock/glass_atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/research_outpost/power) +"dVt" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/research_outpost/atmos) "dVu" = (/obj/structure/cable/heavyduty{tag = "icon-0-4"; icon_state = "0-4"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/wall/r_wall,/area/research_outpost/power) "dVv" = (/obj/structure/cable/heavyduty{tag = "icon-4-8"; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/research_outpost/power) "dVw" = (/obj/structure/cable/heavyduty{tag = "icon-2-8"; icon_state = "2-8"},/turf/simulated/wall/r_wall,/area/research_outpost/power) @@ -10600,10 +10600,10 @@ "dVR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/research_outpost/anomaly) "dVS" = (/obj/machinery/door/airlock/research{name = "Anomalous Materials"; req_access_txt = "65"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "dVT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/research_outpost/hallway) -"dVU" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) +"dVU" = (/obj/machinery/door/airlock/atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/universal{tag = "icon-map_universal (EAST)"; icon_state = "map_universal"; dir = 4},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dVV" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/power) "dVW" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/floor/plating,/area/research_outpost/power) -"dVX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/research_outpost/power) +"dVX" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dVY" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating,/area/research_outpost/power) "dVZ" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/sign/electricshock{pixel_x = 32},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/research_outpost/power) "dWa" = (/obj/structure/cable/heavyduty{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/research_outpost/power) @@ -10632,7 +10632,7 @@ "dWx" = (/obj/machinery/light/small,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "dWy" = (/obj/machinery/camera{c_tag = "Research Outpost Anomalous Materials Lab"; dir = 8; network = list("Research","SS13")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "dWz" = (/obj/structure/sign/science{desc = "A warning sign which reads 'ANOMALOUS MATERIALS'"; name = "\improper ANOMALOUS MATERIALS"; pixel_x = -32},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (WEST)"; icon_state = "map-scrubbers"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/research_outpost/hallway) -"dWA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) +"dWA" = (/obj/machinery/light/small,/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dWB" = (/obj/machinery/door/airlock/engineering{name = "Outpost Power"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/research_outpost/power) "dWC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/research_outpost/power) "dWD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/turf/simulated/floor/plating,/area/research_outpost/power) @@ -10658,7 +10658,7 @@ "dWX" = (/obj/machinery/door/airlock/research{name = "Anomalous Materials Locker Room"; req_access_txt = "65"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "dWY" = (/obj/machinery/door/airlock/research{name = "Anomalous Materials"; req_access_txt = "65"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) "dWZ" = (/obj/machinery/camera{c_tag = "Research Outpost Hallway Engineering"; dir = 4; network = list("Research","SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) -"dXa" = (/turf/simulated/floor{dir = 4; icon_state = "whiteyellowcorner"},/area/research_outpost/hallway) +"dXa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) "dXb" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/power/apc{dir = 8; name = "Outpost Power APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/research_outpost/power) "dXc" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/research_outpost/power) "dXd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/turf/simulated/floor/plating,/area/research_outpost/power) @@ -10692,7 +10692,7 @@ "dXF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (EAST)"; icon_state = "map_scrubber_on"; dir = 4},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "dXG" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (WEST)"; icon_state = "intact-scrubbers"; dir = 8},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "dXH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{tag = "icon-map-scrubbers (EAST)"; icon_state = "map-scrubbers"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) -"dXI" = (/obj/machinery/power/apc{dir = 4; name = "Outpost Hallways APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) +"dXI" = (/obj/machinery/door/airlock/glass_atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/research_outpost/power) "dXJ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plating,/area/research_outpost/power) "dXK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/research_outpost/power) "dXL" = (/turf/simulated/floor/plating,/area/research_outpost/power) @@ -11675,7 +11675,7 @@ "eqA" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/mine/west_outpost) "eqB" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/west_outpost) "eqC" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/mine/west_outpost) -"eqD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1},/turf/simulated/floor/plating,/area/mine/west_outpost) +"eqD" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{tag = "icon-map_vent_out (WEST)"; icon_state = "map_vent_out"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) "eqE" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "eqF" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/mine/west_outpost) "eqG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/mine/west_outpost) @@ -11696,8 +11696,8 @@ "eqV" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor,/area/mine/west_outpost) "eqW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/mine/west_outpost) "eqX" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_west_outpost_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null},/turf/simulated/floor,/area/mine/west_outpost) -"eqY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_inner"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = null},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{tag = "icon-map (WEST)"; icon_state = "map"; dir = 8},/turf/simulated/floor,/area/mine/west_outpost) -"eqZ" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) +"eqY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/research_outpost/power) +"eqZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (EAST)"; icon_state = "intact-scrubbers"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway) "era" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = "10;13"},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/mine/west_outpost) "erb" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_outpost_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) "erc" = (/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) @@ -11711,8 +11711,8 @@ "erk" = (/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored) "erl" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/mine/west_outpost) "erm" = (/obj/machinery/door/airlock/glass_mining{name = "Break Room"; req_access_txt = "54"},/turf/simulated/floor,/area/mine/west_outpost) -"ern" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/mine/west_outpost) -"ero" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_west_outpost_pump"; tag_exterior_door = "mining_west_outpost_outer"; frequency = 1379; id_tag = "mining_west_outpost_airlock"; tag_interior_door = "mining_west_outpost_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_west_outpost_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor,/area/mine/west_outpost) +"ern" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowcorner"},/area/research_outpost/hallway) +"ero" = (/obj/machinery/power/apc{dir = 4; name = "Outpost Hallways APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway) "erp" = (/obj/structure/ore_box,/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "mining_west_outpost_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/mine/west_outpost) "erq" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "err" = (/obj/machinery/camera{c_tag = "Crew Area"; dir = 1; network = list("MINE")},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) @@ -11996,6 +11996,11 @@ "ewJ" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "ewK" = (/obj/machinery/mineral/input,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/production) "ewL" = (/turf/space,/area/vox_station/mining) +"ewM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; name = "Air supply main pipe"},/turf/simulated/floor/plating,/area/mine/west_outpost) +"ewN" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) +"ewO" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_inner"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = null},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor,/area/mine/west_outpost) +"ewP" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_west_outpost_pump"; tag_exterior_door = "mining_west_outpost_outer"; frequency = 1379; id_tag = "mining_west_outpost_airlock"; tag_interior_door = "mining_west_outpost_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_west_outpost_sensor"},/turf/simulated/floor,/area/mine/west_outpost) +"ewQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/mine/west_outpost) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12105,82 +12110,82 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHasSayXayYayXayZazaazaazbayXayYayXazcazdazeazfasVawUasVasVazgasZasZasZasZataasVazhaziazjazkazhamzamzazlarXarYamzamzamzaoRazmamAaaaaeHaaaaeHaaaaeHaaaaeHaaaamAauVatYaznazoazpazqazratYayhaoRaxeazsaztaztazuazvazwazxazyazzazAazAazBaxeaxhaysazCacgacHaxjazDazEayvaxjazFazGazHazIazJazKazLazMazMazNazOazPazQazRazSazTarNahgayEazUazVazWazXazYazZaAaaAbaAcaAdahgaAeatKaAfaAgaAhaAiaxEavxaAjatKaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaayTaAkaAlaAmayTaaaaaaaaaaaaaaaaAnaAnaAnaAnaAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaAoarPaApauNaAqaAraAsaAtaAuaAqauNaAvaAwarPaAxaAyasVaAzaAAaAAaAAaAAaAAaAAauTapwaABazhaACaADaAEazhaAFaoRaoRaoRaoRaoRaoRaoRaoRaAGamAaeHaAHaAHaAHaAHaAHaAHaAHaeHamAauVatYaAIaAJaAKaALaAMatYayhaANaxeaxeaxeaxeaxeaAOaykaAPaAQaxeaxeaxeaxeaxeaxhaysaARacgacHaxjazDazEayvaxjawcaASazMazMazMazMazMazMaATaAUaAVazPaAWaAXaAWaAYaAZahgaxrawsaBaaBbaBcaBdaBeaBfaBgaBhawsapWaBiatKaBjaBkaBlaBmaBnaBoaBpatKafHafHaeHaeHaeHaaaaaaaaaaaaaaaaaaayTaBqaBraBsayTaaaaaaaaaaaaaaaaAnaBtaBuaBtaAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxMayYaBvaBwaBwaBwaBwaBxayYaxMaaaarPaByaBzaBAaBAaBAaBAaBAaBAaBAaBAavHapwaABazhaBBaBCaBDazhaBEaBFaBEaBEaBEaBEaBEaBEaBEaBEaBGaaaaAHaBHaBIaBJaBKaBLaAHaaaamAauVatYaBMaBNaBOaBNaBPatYayhamzaxeaBQaBRaBSazuaBTaBUaBVaBWazzaykaBXaBXaxeaxhaysapdacgacHaxjaBYaBZaCaaCbaCcaCdazMaCeaCfaCgaChazMaATaCiaCjazPaCkaClaCmaCnaCoahgaCpawsawsaCqaCrawsawsaCsawvawsawsahgaCtaCuaCvaCwaCxaCyaCzaCuaCuaCAagoafHaCBaCBaCBaCBaCBaCBaCBaCBaCBayTayTaCCaCDayTaCBaaaaaaaaaaAnaAnaCEaCEaCFaAnaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaCGaCHaCIaCHaCHaCJaCKaCHaCHaCIaCLaCMarPaCNaCOaBAaCPaCQaCRaCSaCTaCUaBAavHapwasVazhazhaCVaCWaBGaCXaCYaCZaDaaDbaDcaDdaDeaDfaDgaBGaeHaAHaDhaDiaDjaDkaDlaAHaeHamAauVatYaDmaDnaDoaDnaDpatYayhaDqaxeayjaykaykaDraDsaykaAPaDtaDuaykaykaDvaxeaxhaxiapdacgacHaxjaDwaDxaDyaxjaDzaASazMaDAaDBaDCaDDaDEaDFaDGaDHazPaDIaCuaDJaDKafHahgaDLaDMaDNaDOaCuaCuaDPaDQaDRaDSaDTaDUaDVaDWaDXaDYavsavraDZaEaaEbaEcaEdaEeaEfaEfaEfaCBaEgaEhaEhaEhaEhaEhaEhaEiaEfaEfaCBaCBaCBaCBaAnaEjaEkaElaEmaEnaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCGaCLaCHaEoaEpaEpaEqaEraEsaEtaEuaEpaEpaEvaEwayXaCNaExaBAaEyaEzaEAaEBaECaEDaEEaEFaEGaEGaEHaEIaEJaEKaELaEMaENaEOaEOaEOaEPaEOaEQaERaESaBGaaaaAHaETaDiaEUaDkaEVaAHaaaamAauVatYatYaEWaEXaEYaEZatYayhaFaaxeaxeaxeaxeaxeaFbaykaFcaFdaFeaykaykaFfaxeaFgaFhaFiacgacHaxjaxjaxjaxjaxjaFjaFkaFlaFmaFnazMazMazMazMazMazMazPaFoaEaaFpaFqaFraFsaFtaFuaFvaFwaFxaFyaFvaFzaFAaFuaFvaFvaFBaFCaFDaFEaFFaFGaFHaFEaFEaFEaFEaFEaEfaEgaFIaFIaFJaFKaFKaFKaFKaFKaFKaFLaFMaEfaEfaEfaEfaEfaFNaFOaFPaEmaFQaFRaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaFTaFUaFVaEpaFWaEpaFWaEpaFWaEpaFWaEpaFXaFYaAqaCNaFZaBAaGaaGbaGcaGdaGeaGfaBAaGgaAAaAAaGhaAAaGiapwaBEaGjaGkaGlaGlaGlaGlaGlaGmaGnaGoaBGaeHaAHaGpaGqaGraGsaGtaAHaeHamAauVatYatYatYaGuaGvaGwatYayhaGxaxeaGyaykaGzazuaGAaBUaGBaDtaGCaykaykaGDaxeaGEaGFaGGacgacHacHacHacHacHaGHaGIaGJazMaGKaGLazMaGMazMaGNazMaGMaGOanNaGPanNanNanNaGQaGRafHaGSaGTaGUafHaGSaGVaGWafHaGXaGYaGZahgaHaaHbaHcaHdaHeaHfaHgaHhaHiaFEaEfaHjaFKaFKaHkaFKaHlaHmaHnaHoaFKaHpaHqaHpaHpaHpaHpaHpaHpaHraHsaElaHtaFRaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvaEpaEpaCIaEpaFWaEpaFWaHwaFWaEpaFWaEpaFXaFYaAqaCNaHxaBAaBAaHyaHzaHAaHzaBAaBAaHBaHCasVapwaHDapwapwaBEaHEaHFaHGaHGaHGaHHaHGaHIaHJaHEaBGaaaaAHaAHaHKaHLaHKaAHaAHaaaamAauVaHMaHNaHOaHPaHQaHRaHMayhaHSaxeaHTaykaykaDuaHUaHVaHWaHXaHYaykaykaHZaxeaIaaIbaIcacgaIdacgacgacgacgacgaIeaIfazMaIgaIhazMaIiazMaIjazMaIkazOaIlaImaInaIoafHahgaxraIpaIqaIraIsaItaIuaIvaIwaIxaIyaIzaIAahgaIBaICaIDaIEaIFaIGaIHaIHaIIaFEaEfaIJaFKaIKaILaIMaINaIOaIPaIQaFKaIRaISaHpaITaIUaIVaIWaHpaIXaIYaEmaFQaFRaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaIZaFUaFVaEpaFWaEpaFWaEpaFWaEpaFWaEpaFXaFYaAqaJaaJbaJcaJdaJeaJeaJfazaaJgaJhazaazaaJiaJjaJkatWatWaBEaJlaJmaCYaJnaJoaJoaJpaJqaJraJsaBGaaaaeHaaaaJtaJuaJtaaaaeHaaaamAauVaHMaJvaJwaJxaJyaJzaHMaJAaJBaxeaJCaykaykaJDaJEaBUaJFaJGaJHaJIaykaJJaxeaJKaJLaJMaJNaJOaJPaaaaaaaJQaJRaJSaJTazMaJUaJVaCfaCfaJWaCfaCfaCfazOaJXaqkaqkanYafHanOaxraJYaJZaKaaKbaKcaJZaKaaKdaJYaKeaKfaKgameaKhaKiaKjaKkaKlaIGaIHaKmaKnaFEaEfaHjaFKaHoaKoaKpaKqaKraHoaKsaFKaKtaKuaHpaKvaKwaKxaKyaKzaHraKAaElaEmaKBaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKCaKDaCHaEoaEpaEpaEpaKEaEpaEpaKFaEpaEpaEvaKGaKHaKIaxOaKJaKKaKLaKLaKMaKNaKOaKNaKPazaasVasVasVasVasVaBEaKQaKRaKSaKTaKTaKTaKTaKUaKVaKWaBGaKXaKYaKYaKZaLaaLbaKYaKYaLcamAaLdaHMaHMaLeaLfaHMaHMaHMamzaLgaxeaxeaxeaxeaLhaLiaDuaLjaLkaLlaxeaxeaxeaxeaLmaLnaLoaLoaLpaLqaLraLsaJQaLtaJSaLuazMazMazMazMazMazMazMazMaLvazOaJXaLwaLxaLyaLzakHaLAafHaLBaLCaLDafHaLBaLEaLDafHaLFaLGaLHaLIaLJaFEaLKaLLaLMaLNaIHaLOaLPaFEaEfaHjaFKaLQaKoaLRaKqaKraHoaLSaFKaLTaLUaLVaLWaLXaLYaLZaHpaMaaMbaEmaMcaAnaAnaAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKCaCHaCIaCHaCHaMdaCKaCHaCHaCIaKDaMearPaMfazaaMgaMhaMhaMiaMjaMkasSaMlaMmaMnaMoaMpaMqaMraMsaMtaMraMuaMraMraMraMraMraMraMraMvaMwaMxaMyaMzaMzaMAaMzaMzaMzaMzaMBaMCaMDaMEaMxaMFaMGaMHaMIaMJaMKaMLaMIaMMaMNaMOaMOaMOaMPaMOaMOaMQaMRaMSaMTaMUaMVaMWaMXaMYaLoaLoaLoaMZaNaaNbaNaaNcaNdaNeaNfaNgaNhaLoazMaNiazOaNjaNkaNlaNmafHahgaxrafHaNnaNoaNoaNpaNqaNoaNraNsaNtaNuaNvaNwaNxaFEaNyaNzaNAaNBaIHaKmaNCaFEaEfaHjaFKaHoaHoaNDaNEaHoaHoaLRaFKaNFaNGaNHaNIaNIaNJaNKaHpaNLaNMaElaEmaNNaNOaNPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMgayYaNQaBwaBwaBwaBwaNRayYaMgaaaarPaByaNSaNTaNUaNVaNWaNWaNXasSaNYaNZaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOjaOjaOjaOjaOjaOjaOkaOlaOmaOnaOjaOoaOpaOqaOjaOjaOjaOjaOraOjaOjaOsaOtaOlaOcaOuaOvaOwaOxaOyaOzaOAaOBaOCaOCaODaOCaOCaOCaOEaOFaOGaOHaOIaOJaOKaOLaOCaOCaOCaOCaOCaOMaOvaOCaOCaONaOOaOPaOQaLoazOazOazOafHaORafHafHafHalxaOSafHaOTaNqaNoaOUaNqaNqaNoaOVaOWaOXaOYaOZaPaaPbaPcaPcaPdaPeaPfaPfaPgaFEaEfaHjaFKaPhaHoaHoaPiaHoaHoaPjaFKaHpaHpaHpaHpaHpaPkaHpaHpaAnaPlaAnaAnaAnaAnaAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaAoarPaNTauNaAqaPmaPnaPoaPpaAqauNaPqaPrarPaCNazaaNTaNUaNVaNWaNWaNXasSaPsaPtaPuaPvaMpaPwaPxaPyaMraMraPzaPAaPBaMraPCaPDaPDaPEaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaPSaPTaPUaPVaMpaMIaLoaPWaLoaMIaPXaLoaLmaLoaLoaLoaLoaLoaLoaPYaLoaLoaLmaLoaLoaLoaLoaLoaLoaLoaLoaLoaPZaQaaQaaQaaQbaQcaQbaQdaLoaQeaQfaQgaQhaQiaQjaQeaQkaQlaQmaQnaNoaNqaNqaQoaQpaQqaQraGUaQsaQtaGUaQuaHaaFEaQvaQwaQxaQwaQyaFEaFEaFEaEfaHjaFKaQzaQzaQAaQBaQCaQCaQDaFKaQEaQFaQGaAnaQHaQIaQJaQKaQJaQLaQJaQJaAnaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHasSaxMayYaKHayZazaazaazbaKHayYaKHaQMaQNaQOazaaxMaQPaQPaMiaMjaMkasSaQQaPtazaaQRaQRaQRaQSaQRaQTaQTaQTaQTaQTaQUaQVaQTaQTaQTaQTaQTaQWaQXaQYaQZaQWaRaaRbaMraMuaRcaRdaReaRfaPxaMraRgaRhaRhaRiaRjaLoaRkaRkaRlaRmaRnaRlaRkaRkaRkaRkaRkaJQaRoaRpaRqaRraRsaRsaRsaRsaRsaRtaRuaRuaRuaRuaRuaRuaRuaLoaRvaLoaQeaRwaQiaRxaQiaRyaRzaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRKaRLaRMaRNaRLaROaRPaFEaRQaIFaRRaRSaRTaRUaRVaRVaRVaRWaFKaRXaHoaQAaQBaHoaHoaRYaFKaRZaSaaSbaAnaScaQIaSdaSeaSfaSgaQJaShaAnaeHaeHaSiaSiaSiaSiaSiaSiaSiaSiaSjaSkaSlaeHaeHaSmaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMgaSnaJbaSoaSpaJbaJbaSqaSoaJbaSraSpaSsaStaxOaSuaSvaSwaSwaSwaSwaSxaSwaSyaSzaQRaSAaSBaSCaQTaSDaSEaSFaSGaSHaSEaSIaSJaSKaSLaSMaSNaQWaSOaSPaSQaQWaSRaRbaRbaSSaRbaRbaRhaRhaSTaSUaRhaRhaRhaSVaRjaLoaRkaSWaSXaSYaSZaTaaTbaRkaTcaTdaTeaJQaTfaTgaThaTiaTjaTjaTjaTjaTjaTiaTkaTlaRuaTmaTnaToaRuaTpaRvaLoaQeaTqaTraTsaTtaTuaQeaTvaTwaTxaTyaTzaTAaTBaTCaTDaTEaNoaNsaNtaTFaNvahgaHaaFEaTGaTHaIFaTIaTJaFEaEfaEfaEfaIJaFKaTKaTKaQAaQBaTLaTLaTMaFKaFKaTNaFKaAnaTOaQIaSdaTPaTQaSgaQJaTOaAnaTRaSiaSiaTSaTSaTTaSiaTUaTVaSiaTWaTXaTYaSkaSkaTZaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaxMaUaaUbaUcaUcaUcaUcaUcaUcaUbaUcaUdaUeaUfaJbaUgaUhazaaUiazaaUjaUkazaaUlaUmaQRaUnaUoaUpaQTaUqaUraUsaUraUraUraUtaUuaUraUraUvaUwaQWaUxaUyaUzaQWaSRaRbaUAaUBaUCaUDaRhaUEaUFaUGaUHaUIaUJaLoaRjaLoaRkaUKaULaUMaUMaUNaUOaUPaUQaURaUSaJQaUTaUUaLoaTiaTjaTjaTjaTjaTjaTiaUVaUWaRuaUXaUYaUZaRuaLoaRvaVaaQeaQeaVbaVcaVdaVeaQeaVfaVgaVhaQeaViaTAaNqaNoaNoaVjaNoaVkaOWaOXaVlaVmaVnaFEaFEaFEaFEaFEaFEaFEaFEaFEaEfaHjaFKaRXaHoaQAaQBaHoaHoaHoaVoaVpaVqaVraAnaVsaVtaVuaVvaVwaVxaVyaVzaAnaAnaSiaVAaVBaVBaVBaVCaVBaVBaVDaVEaVFaVGaVHaVIaVJaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarParPaVKaVLaVLaVLaVLaVLaVLaVLaAwarPasSaVMaVNaVOaVOaVOaVOaVOaVOaVOaVOaVOaVOaQRaVPaVQaVRaQTaVSaUraUsaVTaVUaVVaVWaVTaUraUraUvaVXaQWaVYaVZaWaaQWaSRaRbaWbaWcaWdaWeaRhaWfaWgaWgaWhaWgaWiaLoaRjaLoaWjaWkaWlaWmaWnaWoaWpaRkaWqaWraWsaJQaWtaWuaLoaWvaTjaTjaTjaTjaTjaWvaWwaWxaRuaWyaWzaWAaRuaLoaRvaLoaQeaWBaWCaWCaWCaWDaWEaWFaWCaWGaQeaWHaWIaWJaWKaWLaNoaWMaGUaWNaWOaGUaWPaWQaWRaWSaWTaWUaWVaWVaWWaWXaWRaEfaHjaFKaWYaWYaQAaQBaWZaHoaHoaXaaXbaXcaXdaAnaFOaXeaXfaXgaXhaXiaEmaElaXjaXkaSiaXlaXmaXmaXmaXmaXmaXmaXmaXmaXnaXoaXpaXqaVJaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraeHaXsaXtaXuazaaVOaXvaXwaXxaXyaXzaXAaXBaXxaVOaXCaXDaXEaXFaQTaXGaUraUsaVTaVVaXHaXIaVTaUraUraUvaXJaQWaQWaQWaQWaQWaSRaRbaRbaRbaRbaRbaRhaXKaWhaWhaWhaWhaWiaLoaXLaXMaXNaXOaXPaXQaXQaXRaXSaRlaXTaXUaXVaXWaLoaRjaLoaXXaTjaTjaTjaTjaTjaXXaXYaXZaYaaYbaWzaYcaRuaRiaRvaLoaYdaYeaYfaYgaYhaYiaYhaYjaYkaYlaQeaYmaYnaYoaQeaYpaYqaYpaYpaYpaYpaYpahgaYraYsaYtaYuaYuaYuaYvaYwaYxaWRaYyaYzaFKaFKaFKaYAaQBaYBaYCaHoaYDaYEaYFaYGaAnaYHaYIaVsaYJaYKaYLaVyaYMaAnaYNaSiaXlaXmaYOaXmaYPaYQaXmaYRaYQaYSaYTaYUaYUaYVaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaCGaCHaCIaCHaCHaCJaCKaCHaCHaCIaCLaCMarPaCNaCOaBAaCQaCPaCSaCRaCSaCTaBAavHapwasVazhazhaCVaCWaBGaCXaCYaCZaDaaDbaDcaDdaDeaDfaDgaBGaeHaAHaDhaDiaDjaDkaDlaAHaeHamAauVatYaDmaDnaDoaDnaDpatYayhaDqaxeayjaykaykaDraDsaCUaAPaDtaDuaykaykaDvaxeaxhaxiapdacgacHaxjaDwaDxaDyaxjaDzaASazMaDAaDBaDCaDDaDEaDFaDGaDHazPaDIaCuaDJaDKafHahgaDLaDMaDNaDOaCuaCuaDPaDQaDRaDSaDTaDUaDVaDWaDXaDYavsavraDZaEaaEbaEcaEdaEeaEfaEfaEfaCBaEhaEgaEgaEgaEgaEgaEgaEiaEfaEfaCBaCBaCBaCBaAnaEjaEkaElaEmaEnaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCGaCLaCHaEoaEpaEpaEqaEraEsaEtaEuaEpaEpaEvaEwayXaCNaExaBAaCRaEyaEAaEzaEBaEDaEEaEFaEGaEGaEHaEIaEJaEKaELaEMaENaEOaEOaEOaEPaEOaEQaERaESaBGaaaaAHaETaDiaEUaDkaEVaAHaaaamAauVatYatYaEWaEXaEYaEZatYayhaFaaxeaxeaxeaxeaxeaFbaykaFcaFdaFeaykaykaFfaxeaFgaFhaFiacgacHaxjaxjaxjaxjaxjaFjaFkaFlaFmaFnazMazMazMazMazMazMazPaFoaEaaFpaFqaFraFsaFtaFuaFvaFwaFxaFyaFvaFzaFAaFuaFvaFvaFBaFCaFDaFEaFFaFGaFHaFEaFEaFEaFEaFEaEfaEhaECaECaFIaFKaFKaFKaFKaFKaFKaFJaFLaEfaEfaEfaEfaEfaFNaFOaFPaEmaFQaFMaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaFTaFUaFVaEpaFWaEpaFWaEpaFWaEpaFWaEpaFXaFYaAqaCNaFZaBAaGaaFRaGcaGbaGcaGdaBAaGgaAAaAAaGhaAAaGiapwaBEaGjaGkaGlaGeaGlaGlaGlaGmaGnaGoaBGaeHaAHaGpaGqaGraGsaGtaAHaeHamAauVatYatYatYaGuaGvaGwatYayhaGxaxeaGyaykaGzazuaGAaBUaGBaDtaGCaykaykaGDaxeaGEaGFaGGacgacHacHacHacHacHaGHaGIaGJazMaGKaGLazMaGMazMaGNazMaGMaGOanNaGPanNanNanNaGQaGRafHaGSaGTaGUafHaGSaGVaGWafHaGXaGYaGZahgaHaaHbaHcaHdaHeaHfaHgaHhaHiaFEaEfaGfaFKaFKaHkaFKaHlaHmaHnaHoaFKaHpaHqaHpaHpaHpaHpaHpaHpaHraHsaElaHtaFMaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHvaEpaEpaCIaEpaFWaEpaFWaHwaFWaEpaFWaEpaFXaFYaAqaCNaHxaBAaBAaHjaBAaHyaBAaBAaBAaHBaHCasVapwaHDapwapwaBEaHEaHFaHGaHGaHGaHHaHGaHIaHJaHEaBGaaaaAHaAHaHKaHLaHKaAHaAHaaaamAauVaHMaHNaHOaHPaHQaHRaHMayhaHSaxeaHTaykaykaDuaHUaHVaHWaHXaHYaykaykaHZaxeaIaaIbaIcacgaIdacgacgacgacgacgaIeaIfazMaIgaIhazMaIiazMaIjazMaIkazOaHzaImaIlaHAafHahgaxraIpaIqaIraIsaItaIuaIvaIwaIxaIyaIzaIAahgaIBaICaIDaIEaIFaIGaIHaIHaIIaFEaEfaInaFKaIKaILaIMaINaIOaIPaIQaFKaIRaISaHpaITaIUaIVaIWaHpaIXaIYaEmaFQaFMaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaIZaFUaFVaEpaFWaEpaFWaEpaFWaEpaFWaEpaFXaFYaAqaJaaJbaIoaJdaIJaJeaJfazaaJcaJhazaazaaJiaJjaJkatWatWaBEaJlaJmaCYaJnaJoaJoaJpaJqaJraJsaBGaaaaeHaaaaJtaJuaJtaaaaeHaaaamAauVaHMaJvaJwaJxaJyaJzaHMaJAaJBaxeaJCaykaykaJDaJEaBUaJFaJGaJHaJIaykaJJaxeaJKaJLaJMaJNaJOaJPaaaaaaaJQaJRaJSaJTazMaJUaJVaCfaCfaJWaCfaCfaCfazOaJgaqkaqkanYafHanOaxraJYaJZaKaaKbaKcaJZaKaaKdaJYaKeaKfaKgameaKhaKiaKjaKkaKlaIGaIHaKmaKnaFEaEfaGfaFKaHoaKoaKpaKqaKraHoaKsaFKaKtaKuaHpaKvaKwaKxaKyaKzaHraKAaElaEmaJXaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKCaKDaCHaEoaEpaEpaEpaKEaEpaEpaKFaEpaEpaEvaKGaKHaKIaxOaKBaKKaKJaKMaKLaKNaKOaKNaKPazaasVasVasVasVasVaBEaKQaKRaKSaKTaKTaKTaKTaKUaKVaKWaBGaKXaKYaKYaKZaLaaLbaKYaKYaLcamAaLdaHMaHMaLeaLfaHMaHMaHMamzaLgaxeaxeaxeaxeaLhaLiaDuaLjaLkaLlaxeaxeaxeaxeaLmaLnaLoaLoaLpaLqaLraLsaJQaLtaJSaLuazMazMazMazMazMazMazMazMaLvazOaJgaLwaLxaLyaLzakHaLAafHaLBaLCaLDafHaLBaLEaLDafHaLFaLGaLHaLIaLJaFEaLKaLLaLMaLNaIHaLOaLPaFEaEfaGfaFKaLQaKoaLRaKqaKraHoaLSaFKaLTaLUaLVaLWaLXaLYaLZaHpaMaaMbaEmaMcaAnaAnaAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKCaCHaCIaCHaCHaMdaCKaCHaCHaCIaKDaMearPaMfazaaMhaMjaMiaNjaMkaNUasSaMlaMmaMnaMoaMpaMqaMraMsaMtaMraMuaMraMraMraMraMraMraMraMvaMwaMxaMyaMzaMzaMAaMzaMzaMzaMzaMBaMCaMDaMEaMxaMFaMGaMHaMIaMJaMKaMLaMIaMMaMNaMOaMOaMOaMPaMOaMOaMQaMRaMSaMTaMUaMVaMWaMXaMYaLoaLoaLoaMZaNaaNbaNaaNcaNdaNeaNfaNgaNhaLoazMaNiazOaNVaNkaNlaNmafHahgaxrafHaNnaNoaNoaNpaNqaNoaNraNsaNtaNuaNvaNwaNxaFEaNyaNzaNAaNBaIHaKmaNCaFEaEfaGfaFKaHoaHoaNDaNEaHoaHoaLRaFKaNFaNGaNHaNIaNIaNJaNKaHpaNLaNMaElaEmaNNaNOaNPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMgayYaNQaBwaBwaBwaBwaNRayYaMgaaaarPaByaNSaNWaQPaNXaNXaRVaRWasSaNYaNZaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOjaOjaOjaOjaOjaOjaOkaOlaOmaOnaOjaOoaOpaOqaOjaOjaOjaOjaOraOjaOjaOsaOtaOlaOcaOuaOvaOwaOxaOyaOzaOAaOBaOCaOCaODaOCaOCaOCaOEaOFaOGaOHaOIaOJaOKaOLaOCaOCaOCaOCaOCaOMaOvaOCaOCaONaOOaOPaOQaLoazOazOazOafHaORafHafHafHalxaOSafHaOTaNqaNoaOUaNqaNqaNoaOVaOWaOXaOYaOZaPaaPbaPcaPcaPdaPeaPfaPfaPgaFEaEfaGfaFKaPhaHoaHoaPiaHoaHoaPjaFKaHpaHpaHpaHpaHpaPkaHpaHpaAnaPlaAnaAnaAnaAnaAnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaAoarPaNTauNaAqaPmaPnaPoaPpaAqauNaPqaPrarPaCNazaaNWaSxaSuaNXaTIaUdasSaPsaPtaPuaPvaMpaPwaPxaPyaMraMraPzaPAaPBaMraPCaPDaPDaPEaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPPaPQaPRaPSaPSaPTaPUaPVaMpaMIaLoaPWaLoaMIaPXaLoaLmaLoaLoaLoaLoaLoaLoaPYaLoaLoaLmaLoaLoaLoaLoaLoaLoaLoaLoaLoaPZaQaaQaaQaaQbaQcaQbaQdaLoaQeaQfaQgaQhaQiaQjaQeaQkaQlaQmaQnaNoaNqaNqaQoaQpaQqaQraGUaQsaQtaGUaQuaHaaFEaQvaQwaQxaQwaQyaFEaFEaFEaEfaGfaFKaQzaQzaQAaQBaQCaQCaQDaFKaQEaQFaQGaAnaQHaQIaQJaQKaQJaQLaQJaQJaAnaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaaaaaaaaaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHasSaxMayYaKHayZazaazaazbaKHayYaKHaQMaQNaQOazaaUgaVdaUkaYyaYyaNUasSaQQaPtazaaQRaQRaQRaQSaQRaQTaQTaQTaQTaQTaQUaQVaQTaQTaQTaQTaQTaQWaQXaQYaQZaQWaRaaRbaMraMuaRcaRdaReaRfaPxaMraRgaRhaRhaRiaRjaLoaRkaRkaRlaRmaRnaRlaRkaRkaRkaRkaRkaJQaRoaRpaRqaRraRsaRsaRsaRsaRsaRtaRuaRuaRuaRuaRuaRuaRuaLoaRvaLoaQeaRwaQiaRxaQiaRyaRzaRAaRBaRCaRDaREaRFaRGaRHaRIaRJaRKaRLaRMaRNaRLaROaRPaFEaRQaIFaRRaRSaRTaRUaYzaYzaYzbcHaFKaRXaHoaQAaQBaHoaHoaRYaFKaRZaSaaSbaAnaScaQIaSdaSeaSfaSgaQJaShaAnaeHaeHaSiaSiaSiaSiaSiaSiaSiaSiaSjaSkaSlaeHaeHaSmaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMgaSnaJbaSoaSpaJbaJbaSqaSoaJbaSraSpaSsaStaxObeFaSvaSwaSwaSwaSwbeGaSwaSyaSzaQRaSAaSBaSCaQTaSDaSEaSFaSGaSHaSEaSIaSJaSKaSLaSMaSNaQWaSOaSPaSQaQWaSRaRbaRbaSSaRbaRbaRhaRhaSTaSUaRhaRhaRhaSVaRjaLoaRkaSWaSXaSYaSZaTaaTbaRkaTcaTdaTeaJQaTfaTgaThaTiaTjaTjaTjaTjaTjaTiaTkaTlaRuaTmaTnaToaRuaTpaRvaLoaQeaTqaTraTsaTtaTuaQeaTvaTwaTxaTyaTzaTAaTBaTCaTDaTEaNoaNsaNtaTFaNvahgaHaaFEaTGaTHaIFaTJbeIaFEaEfaEfaEfaInaFKaTKaTKaQAaQBaTLaTLaTMaFKaFKaTNaFKaAnaTOaQIaSdaTPaTQaSgaQJaTOaAnaTRaSiaSiaTSaTSaTTaSiaTUaTVaSiaTWaTXaTYaSkaSkaTZaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaxMaUaaUbaUcaUcaUcaUcaUcaUcaUbaUcbeJaUeaUfaJbbeKaUhazaaUiazaaUjbgtazaaUlaUmaQRaUnaUoaUpaQTaUqaUraUsaUraUraUraUtaUuaUraUraUvaUwaQWaUxaUyaUzaQWaSRaRbaUAaUBaUCaUDaRhaUEaUFaUGaUHaUIaUJaLoaRjaLoaRkaUKaULaUMaUMaUNaUOaUPaUQaURaUSaJQaUTaUUaLoaTiaTjaTjaTjaTjaTjaTiaUVaUWaRuaUXaUYaUZaRuaLoaRvaVaaQeaQeaVbaVcbjOaVeaQeaVfaVgaVhaQeaViaTAaNqaNoaNoaVjaNoaVkaOWaOXaVlaVmaVnaFEaFEaFEaFEaFEaFEaFEaFEaFEaEfaGfaFKaRXaHoaQAaQBaHoaHoaHoaVoaVpaVqaVraAnaVsaVtaVuaVvaVwaVxaVyaVzaAnaAnaSiaVAaVBaVBaVBaVCaVBaVBaVDaVEaVFaVGaVHaVIaVJaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarParPaVKaVLaVLaVLaVLaVLaVLaVLaAwarPasSaVMaVNaVOaVOaVOaVOaVOaVOaVOaVOaVOaVOaQRaVPaVQaVRaQTaVSaUraUsaVTaVUaVVaVWaVTaUraUraUvaVXaQWaVYaVZaWaaQWaSRaRbaWbaWcaWdaWeaRhaWfaWgaWgaWhaWgaWiaLoaRjaLoaWjaWkaWlaWmaWnaWoaWpaRkaWqaWraWsaJQaWtaWuaLoaWvaTjaTjaTjaTjaTjaWvaWwaWxaRuaWyaWzaWAaRuaLoaRvaLoaQeaWBaWCaWCaWCaWDaWEaWFaWCaWGaQeaWHaWIaWJaWKaWLaNoaWMaGUaWNaWOaGUaWPaWQaWRaWSaWTaWUaWVaWVaWWaWXaWRaEfaGfaFKaWYaWYaQAaQBaWZaHoaHoaXaaXbaXcaXdaAnaFOaXeaXfaXgaXhaXiaEmaElaXjaXkaSiaXlaXmaXmaXmaXmaXmaXmaXmaXmaXnaXoaXpaXqaVJaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraeHaXsaXtaXuazaaVOaXvaXwaXxaXyaXzaXAaXBaXxaVOaXCaXDaXEaXFaQTaXGaUraUsaVTaVVaXHaXIaVTaUraUraUvaXJaQWaQWaQWaQWaQWaSRaRbaRbaRbaRbaRbaRhaXKaWhaWhaWhaWhaWiaLoaXLaXMaXNaXOaXPaXQaXQaXRaXSaRlaXTaXUaXVaXWaLoaRjaLoaXXaTjaTjaTjaTjaTjaXXaXYaXZaYaaYbaWzaYcaRuaRiaRvaLoaYdaYeaYfaYgaYhaYiaYhaYjaYkaYlaQeaYmaYnaYoaQeaYpaYqaYpaYpaYpaYpaYpahgaYraYsaYtaYuaYuaYuaYvaYwaYxaWRbjQbjPaFKaFKaFKaYAaQBaYBaYCaHoaYDaYEaYFaYGaAnaYHaYIaVsaYJaYKaYLaVyaYMaAnaYNaSiaXlaXmaYOaXmaYPaYQaXmaYRaYQaYSaYTaYUaYUaYVaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraXraYWaYXaYYaCNazaaVOaYZaXxaZaaXBaZbaZcaXBaXxaVOaZdaZeaZfaQRaQTaZgaZhaZiaZjaZkaZlaZmaZnaZnaZnaZoaZpaQTaZqaXCaXCaXCaSRaXCaXCaSAaQRaZraRhaZsaZtaZuaZvaZvaZwaLoaZxaLoaZyaWkaWlaWnaZzaZAaZBaRnaZCaZDaZCaZEaZFaZGaZHaZIaTjaTjaTjaTjaTjaZIaWwaZJaRuaZKaZLaZMaRuaZNaRvaLoaYdaYeaYfaZOaYfaZPaYfaZQaYfaZRaZSaZTaQiaZTaQeaZUaZVaZWaZXaZYaZZbaaahLbabbacbadbaebafbagbahbaibajaWRbakbalbambanbaobapbaqbarbarbarbasbatbaubarbavbawbaxbaybazbaAbaBbaCbaDbaEbaFbaGbaHaXmaYQaXmaYRaYOaXmaYPaYObaIbaJaTRaTRaTRaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraXrbaKbaLbaMbaNbaOaVObaPaXBbaQbaQbaQbaQaXvbaRaVObaSaXDbaTbaUbaUbaUbaUbaVbaUbaWaUrbaXbaYbaZbaZbbabbbaQTbbcbbdbbebbfbbgbbhbbhbbibbjbbjbbkbbkbbkbbkbbkbblaRhbbmbbnaZHbbobbpaWlaWnbbqbbrbbsaRlbbtbbubbvaRkaJQbbwaMIaWvaTjaTjaTjaTjaTjaWvaWwaXZaRuaRubbxaRuaRuaLobbyaLoaQebbzaYfbbAaYfbbBbbCbbDbbEbbFaQiaQiaQibbGaQebbHbbIbbIbbIbbIbbJbbKaiKbbLbbMbbNbbObbObbObbPaYwbbQaWRbbRbbSbbTbbUbbVbbWbbXbbWbbYbbZbcabcbbccaQAaAnbcdaYIaVsaYJaYKaVzaVybceaAnaAnaSibcfaXmaYQaXmaYRaYQaXmaYRaYQbcgbchbcibcibcjaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraXrbclbcmaYYbcnbcobcpbcqbcrbcsbctbcubaQbcvaXvaVObcwbcxbcybaUbczbcAbcBbcCbaUbcDbcEbcFaQTbcGbcHbcIbcJaQTaXCbcKbcLbcLbcLbcLbcMbcLbcLbcNbcObcObcObcPbcObcQbcRbcSbcTbcSaRkbcUaWlbcVbbqbcWaJQaJQbcXbcYaJQaJQbcZaRjaLoaXXaTjaTjaTjaTjaTjaXXaXYaXZbdabdbbdcbddaRubdebdfbdgaQebdhbdibdjbdjbdkbdkbdjbdibdlbdmaQiaQibdnaQebdobbIbdpbbIbdqbdraYpbdsbdtaWRbdubdvbdwaWVaWVaWVbdxaWRbdybdzbdAbdBaFKbdCbdDbdEbdFbdGbdHbdIbdJaHoaAnaQHaQJaTOaYJaYKaTOaQJaQHaAnbdKaSibdLaXmaXmaXmaXmaXmaXmaXmaXmbdMbdNbdOaVIbdPaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXrbdQaxMbdRbdSbdTaVOaXzaXzaXxbdUbdVaXxbdWaXzaVObdXbdYbdZbaUbaUbaUbeabebbaUbcEbcEbcEaQTbcGbcHbecbedaQTaXCbeebcLbefbegbehbeibejbcLbekbelbembenbcRbcRbcRbcRaLobeoaLoaWjaWkaWlbcVbbqaWkaJQbepbeqberbesaRobetaRjaLoaZIaTjaTjaTjaTjaTjaZIaWwaXZbeubevbdcbewaRubexbeybexaQeaQeaQeaQeaQebezbezaQeaQeaQeaQeaQeaQebeAaQebeBbeCaYpbeDaYpaYpaYpbeEbeFaWRaWRaWRaWRaWRaWRaWRaWRaWRbdybdzbdAbdBaFKaFKaFKaFKaFKaFKaFKaFKaFKaFKaAnbeGbeHbeIbeJbeKbeGbeHbeIaAnaSiaSiaXlaXmaXmaXmaXmbeLaXmaXmaXmbeMbdNbeNbeObdPaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckaaaaaaaaaaaaaaaaAoarPbePaBwaYYasSasSasSasSasSasSbeQbeRaVOaVOaVOaVOaVOaVOaVOaVOaVOaVObeSbeTbeUbaUbczbeVbeabeWbaUbeXbeYbeXaQTbcGbcHbeZbfaaQTaXCbeebcLbfbbfcbfdbfebffbcLbekbfgbfhbfhbfibfjbfkbcRbflaZxaLoaZyaWkaWlaWnbbqaWkbfmbfnbfobfpbfqbfraOCbfsaLoaTiaTjaTjaTjaTjaTjaTiaWwbftbfubfvbfwbfxaRuaZNbfyaThbfzbfAbfBbfCbdAbdybdybdAbdAbdAbfDbdAbfEbdybfFbdAbdAbdAbdAbdAbdAbdAbfGbfHbfIbfJbdAbdAbdAbfEbdAbfKbdAbfLbfMbdAbdAbfNbdAbfObdAbfPbdAbdAbdAbfFbdAbfQbfRbdAbdAbfSbfTbdAbfCbfKbfUbfVbfWbfXaVBbfYaVBbfZbfYbgaaYRaYQaYSbgbbgcbgcbgdaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbgebgfbggbghbgibgjbgkbgkbglbgmbgkbgnbgoaQRbgpbgqbgrbaUbaUbaUbgsbebbaUaQTaQTaQTaQTbcGbgtbgubgvaQTbgwbgxbcLbgybgzbgAbgBbgCbcLbekbgDbfhbfhbgEbfhbgFbcRbgGaZxaLobboaWkbgHbgIaZAaWkbgJbgKaLobgLbgMbgNaLobgLaLoaTiaTjaTjaTjaTjaTjaTibgObgPbgQbgRbdcbgSaRubgTbgUbgVbgWbgXbgYbgZbhabhbbhcbhabhabhabhabhabhabhdbhabhabhabhabhabhabhabhabhebhfbhgbhhbhabhabhabhabhabhibhjbhkbhlbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbhmbhnbbUbhobhpbhqbhrbhsbhtbhubhvbhwbhxbhvbhybhxbhzbaIbhAaaaaaabhBaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckaYWaVLaVLaVLaVLaVLaVLaVLaVLaVLbhCaVLaYXbhDbhEbhFbhGbhHbhGbhGbhIbhGbhGbhJaQRaQRaQRaQRbgrbaUbczbhKbhLbeWbaUbhMbhNbhMaQTaQTaQTaQTbhOaQTbhPbeebcLbhQbhRbfdbhSbhTbcLbekbcRbhUbfhbgEbfhbhVbcRaLoaZxaLoaRkbhWbhXbhYbhZbiaaJQbibbicbidbieaRobifbgLaLobigaRsaRsaRsaRsaRsbihaXYbiibijbikbilbimaRubinbioaLobipbiqbirbisbitbiubivbiubiubiubiubivbiwbiwbivbiubiubiubiubixbiubiybiubizbiAbiBbiCbiDbiDbiEbiEbiFbiGbiHbiIbdAbdAbiJbiJbdAbdAbiKbdAbdAbdAbdAbdAbdAbdAbdAbdAbdAbdAbdAbiLbfKbiMbfVaXmbiNaXmbiObiPbiQbiRbiSbiQbiTbiUbiVaTRaTRaTRaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckbiWbiXbiYbiZbjabjbbjcbjcbjdbjcbjeauNauNbjfbjgbjhbhGbjibhGbjjbjkbjlbjmbjnbjobjobjobjobjpbaUbaUbaUbeabjqbaUaQRaQRaQRaQRbjraXCaXCbjsbbhbjtbjubjvbjwbjxbjybjzbegbcLbjAbcRbjBbfhbgEbfhbjCbjDaLoaZxbjEbjFbjGbjHbjIbjFbjFbjJbjJbjKbjLbjMbjNbjJbgLaLobjObjPbjQbjRbjSbjTbjUbjVbjWbeubevbdcbjXaRubjYbjZbjYbkabkabkabkabkabkbbkabkcbkdbkebkfbkgbkhbkibkjbkfbkkbkdbklbkmbkmbkmbknbkmbkmbkmbkmbkobkpbkqbkrbksbktbkubkvbkwbkvbkxbkxbkvbkybkzbkAbkzbkvbkvbkvbkvbkBbdAbkBbkCbkBbkBbkDbkEbkEbkEbkEbkFbksbkGaSiaSiaSiaSiaSiaSiaSiaSiaTRaTRaTRaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckbclbkHbkIbkIbkJbkIbkKaVLaVLbkLbkMbkNbhCbhDbhEbkObhGbkPbkQbkRbkSbkTbkUbbhbbhbkVbkWbkWbkXbkYbkZblablbblcbkYbldbleblfblgblhblibljblkbllbllblmbcLblnbloblpblqblrbjvblsbcRbltbfhbgEblublvblwaLoaZxaLoblxblyblzblAblBblCbjJblDblEblFblGblHbjJbgLaLoblIblIblJblKblKblLblMblNblOblPblQblRblSblTbdeblUaThbkablVblWblXblYblZbmabmbbmcbmdbmebmfbmgbmhbmfbmibmjbmkbkdbmlbmmbmnbmobmpbmqbmpbkmbksbksbmrbksbksbmsbkybmtbmubmvbmwbmxbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbkBbkDbkEbmHbmIbmHbkEbmJbmKbkEbmLbmMbmNbksaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckbmOaaaaaaaaaaaaaaaaaaaaaaaaaNTbmPaNTbmQbmRbmSbmTbhGbmUbhGbmVbkSbmWbhGaQRbmXaXCbmYaXCbmZbaUbaUbaUbaUbaUbaUbnabnbbncbndbnebcLbcLbcLbcLbcLbcLbcLbnfbngbcLbcLbngbcLbnhbnibnjbnkbnlbnkbnmbjDaLoaZxaLobjFbnnbnobnpbnpbnqbnrbnsbntbnubnvbnwbjJbnxaOvbnyaOvaOvbnzbnAbnBbnCbnDbnEbgVbgVbnFbnGbnHbnIbgLaLobnJbnKbnLbnMbnNbnObnPbnQbnRbnSbnSbnSbnSbnTbnSbnSbnUbnVbkdbnWbnXbnYbnWbmpbnWbmpbkmbnZbksboabobbksbmsbkybocbodbodboebmxbmxbofbogbohboibojbokbolbmFbombonboobkEbopboqborbosbotboubkEbovbowboxbksaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckaaaaaaaaaaaaaaaaAobePaBwbcmaVLaVLboybkMbozboAboBboCazabhGbmUboDboEbkSboFbhGbgoaXCaXCaXCaXCboGboHboHboHbljbljbljbljbljbljboIboJbcLboKboLboMboNboOboPboQboRboSboTboUboVblsbjDboWbfhbgEboXbcRbcRaLoaZxboYbjFboZblzbpabpbbpcbpdbpebpfbpgbphbpibjJbpjbpkaPXaLoaLobplbpmaLoaLmbpnaLoaLoaLobpoaLoaRqaLmaRjbppbkabpqbprbpsbptbpubpvbpwbpxbnSbnSbnSbnSbnSbnSbnSbnUbpybkdbpzbpAbpBbpCbnWbnWbnWbpDbpEbksbpFbpGbksbmsbkybpHbpIbpJbpKbmxbpLbofbpMbpNbpObpPbpQbpRbmFbpSbpTbpUbkEbpVbotbotbpWbpXbpYbkEbpZbowbqabksaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraXrbaKbaLbaMbaNbaOaVObaPaXBbaQbaQbaQbaQaXvbaRaVObaSaXDbaTbaUbaUbaUbaUbaVbaUbaWaUrbaXbaYbaZbaZbbabbbaQTbbcbbdbbebbfbbgbbhbbhbbibbjbbjbbkbbkbbkbbkbbkbblaRhbbmbbnaZHbbobbpaWlaWnbbqbbrbbsaRlbbtbbubbvaRkaJQbbwaMIaWvaTjaTjaTjaTjaTjaWvaWwaXZaRuaRubbxaRuaRuaLobbyaLoaQebbzaYfbbAaYfbbBbbCbbDbbEbbFaQiaQiaQibbGaQebbHbbIbjRbbIbbIbbJbbKaiKbbLbbMbbNbbObbObbObbPaYwbbQaWRbbRbbSbbTbbUbbVbbWbbXbbWbbYbbZbcabcbbccaQAaAnbcdaYIaVsaYJaYKaVzaVybceaAnaAnaSibcfaXmaYQaXmaYRaYQaXmaYRaYQbcgbchbcibcibcjaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXraXrbclbcmaYYbcnbcobcpbcqbcrbcsbctbcubaQbcvaXvaVObcwbcxbcybaUbczbcAbcBbcCbaUbcDbcEbcFaQTbcGbjSbcIbcJaQTaXCbcKbcLbcLbcLbcLbcMbcLbcLbcNbcObcObcObcPbcObcQbcRbcSbcTbcSaRkbcUaWlbcVbbqbcWaJQaJQbcXbcYaJQaJQbcZaRjaLoaXXaTjaTjaTjaTjaTjaXXaXYaXZbdabdbbdcbddaRubdebdfbdgaQebdhbdibdjbdjbdkbdkbdjbdibdlbdmaQiaQibdnaQebdobbIbdpbbIbdqbdraYpbdsbdtaWRbdubdvbdwaWVaWVaWVbdxaWRbdybdzbdAbdBaFKbdCbdDbdEbdFbdGbdHbdIbdJaHoaAnaQHaQJaTOaYJaYKaTOaQJaQHaAnbdKaSibdLaXmaXmaXmaXmaXmaXmaXmaXmbdMbdNbdOaVIbdPaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckaaaaaaaXraXraXraXraXraXraXraXraXraXraXraXrbdQaxMbdRbdSbdTaVOaXzaXzaXxbdUbdVaXxbdWaXzaVObdXbdYbdZbaUbaUbaUbeabebbaUbcEbcEbcEaQTbcGbjSbecbedaQTaXCbeebcLbefbegbehbeibejbcLbekbelbembenbcRbcRbcRbcRaLobeoaLoaWjaWkaWlbcVbbqaWkaJQbepbeqberbesaRobetaRjaLoaZIaTjaTjaTjaTjaTjaZIaWwaXZbeubevbdcbewaRubexbeybexaQeaQeaQeaQeaQebezbezaQeaQeaQeaQeaQeaQebeAaQebeBbeCaYpbeDaYpaYpaYpbeEbjTaWRaWRaWRaWRaWRaWRaWRaWRaWRbdybdzbdAbdBaFKaFKaFKaFKaFKaFKaFKaFKaFKaFKaAnbjUbeHblJblLblKbjUbeHblJaAnaSiaSiaXlaXmaXmaXmaXmbeLaXmaXmaXmbeMbdNbeNbeObdPaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckaaaaaaaaaaaaaaaaAoarPbePaBwaYYasSasSasSasSasSasSbeQbeRaVOaVOaVOaVOaVOaVOaVOaVOaVOaVObeSbeTbeUbaUbczbeVbeabeWbaUbeXbeYbeXaQTbcGbjSbeZbfaaQTaXCbeebcLbfbbfcbfdbfebffbcLbekbfgbfhbfhbfibfjbfkbcRbflaZxaLoaZyaWkaWlaWnbbqaWkbfmbfnbfobfpbfqbfraOCbfsaLoaTiaTjaTjaTjaTjaTjaTiaWwbftbfubfvbfwbfxaRuaZNbfyaThbfzbfAbfBbfCbdAbdybdybdAbdAbdAbfDbdAbfEbdybfFbdAbdAbdAbdAbdAbdAbdAbfGbfHbfIbfJbdAbdAbdAbfEbdAbfKbdAbfLbfMbdAbdAbfNbdAbfObdAbfPbdAbdAbdAbfFbdAbfQbfRbdAbdAbfSbfTbdAbfCbfKbfUbfVbfWbfXaVBbfYaVBbfZbfYbgaaYRaYQaYSbgbbgcbgcbgdaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHbgebgfbggbghbgibgjbgkbgkbglbgmbgkbgnbgoaQRbgpbgqbgrbaUbaUbaUbgsbebbaUaQTaQTaQTaQTbcGbmvbgubgvaQTbgwbgxbcLbgybgzbgAbgBbgCbcLbekbgDbfhbfhbgEbfhbgFbcRbgGaZxaLobboaWkbgHbgIaZAaWkbgJbgKaLobgLbgMbgNaLobgLaLoaTiaTjaTjaTjaTjaTjaTibgObgPbgQbgRbdcbgSaRubgTbgUbgVbgWbgXbgYbgZbhabhbbhcbhabhabhabhabhabhabhdbhabhabhabhabhabhabhabhabhebhfbhgbhhbhabhabhabhabhabhibhjbhkbhlbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbbUbhmbhnbbUbhobhpbhqbhrbhsbhtbhubhvbhwbhxbhvbhybhxbhzbaIbhAaaaaaabhBaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckaYWaVLaVLaVLaVLaVLaVLaVLaVLaVLbhCaVLaYXbhDbhEbhFbhGbhHbhGbhGbhIbhGbhGbhJaQRaQRaQRaQRbgrbaUbczbhKbhLbeWbaUbhMbhNbhMaQTaQTaQTaQTbhOaQTbhPbeebcLbhQbhRbfdbhSbhTbcLbekbcRbhUbfhbgEbfhbhVbcRaLoaZxaLoaRkbhWbhXbhYbhZbiaaJQbibbicbidbieaRobifbgLaLobigaRsaRsaRsaRsaRsbihaXYbiibijbikbilbimaRubinbioaLobipbiqbirbisbitbiubivbiubiubiubiubivbiwbiwbivbiubiubiubiubixbiubiybiubizbiAbiBbiCbiDbiDbiEbiEbiFbiGbiHbiIbdAbdAbiJbiJbdAbdAbiKbdAbdAbkpbdAbdAbdAbdAbdAbdAbdAbdAbdAbiLbfKbiMbfVaXmbiNaXmbiObiPbiQbiRbiSbiQbiTbiUbiVaTRaTRaTRaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckbiWbiXbiYbiZbjabjbbjcbjcbjdbjcbjeauNauNbjfbjgbjhbhGbjibhGbjjbjkbjlbjmbjnbjobjobjobjobjpbaUbaUbaUbeabjqbaUaQRaQRaQRaQRbjraXCaXCbjsbbhbjtbjubjvbjwbjxbjybjzbegbcLbjAbcRbjBbmDbgEbfhbjCbjDaLoaZxbjEbjFbjGbjHbjIbjFbjFbjJbjJbjKbjLbjMbjNbjJbgLaLoblIbnzbnzbnzbnzbnAbsXbjVbjWbeubevbdcbjXaRubjYbjZbjYbkabkabkabkabkabkbbkabkcbkdbkebkfbkgbkhbkibkjbkfbkkbkdbklbkmbkmbkmbknbkmbkmbkmbkmbkobkpbkqbkrbksbktbkubkvbkwbkvbkxbkxbkvbkybkzbkAbkzbkvbkvbkvbkvbkBbdAbkBbkCbkBbkBbkDbkEbkEbkEbkEbkFbksbkGaSiaSiaSiaSiaSiaSiaSiaSiaTRaTRaTRaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckbclbkHbkIbkIbkJbkIbkKaVLaVLbkLbkMbkNbhCbhDbhEbkObhGbkPbkQbkRbkSbkTbkUbbhbbhbkVbkWbkWbkXbkYbkZblablbblcbkYbldbleblfblgblhblibljblkbllbllblmbcLblnbloblpblqblrbjvblsbcRbltbfhbgEblublvblwaLoaZxaLoblxblyblzblAblBblCbjJblDblEblFblGblHbjJbgLaLoblIblIblIblIblIblIblMblNblOblPblQblRblSblTbdeblUaThbkablVblWblXblYblZbmabmbbmcbmdbmebmfbmgbmhbmfbmibmjbmkbkdbmlbmmbmnbmobmpbmqbmpbkmbksbksbmrbksbksbmsbkybmtbmubsYbmwbmxbmxbmybmzbmAbmBbmCbwgbmEbmFbmGbkBbkDbkEbmHbmIbmHbkEbmJbmKbkEbmLbmMbmNbksaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFSaFSaFSaFSaFSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckbckbckbckbckbmOaaaaaaaaaaaaaaaaaaaaaaaaaNTbmPaNTbmQbmRbmSbmTbhGbmUbhGbmVbkSbmWbhGaQRbmXaXCbmYaXCbmZbaUbaUbaUbaUbaUbaUbnabnbbncbndbnebcLbcLbcLbcLbcLbcLbcLbnfbngbcLbcLbngbcLbnhbnibnjbnkbnlbnkbnmbjDaLoaZxaLobjFbnnbnobnpbnpbnqbnrbnsbntbnubnvbnwbjJbnxaOvbnyaOvaOvbwubnBbnBbnCbnDbnEbgVbgVbnFbnGbnHbnIbgLaLobnJbnKbnLbnMbnNbnObnPbnQbnRbnSbnSbnSbnSbnTbnSbnSbnUbnVbkdbnWbnXbnYbnWbmpbnWbmpbkmbnZbksboabobbksbmsbkybocbodbodboebmxbmxbofbogbohboibojbokbolbmFbombonboobkEbopboqborbosbotboubkEbovbowboxbksaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckbckaaaaaaaaaaaaaaaaAobePaBwbcmaVLaVLboybkMbozboAboBboCazabhGbmUboDboEbkSboFbhGbgoaXCaXCaXCaXCboGboHboHboHbljbljbljbljbljbljboIboJbcLboKboLboMboNboOboPboQboRboSboTboUboVblsbjDboWbfhbgEboXbcRbcRaLoaZxboYbjFboZblzbpabpbbpcbpdbpebpfbpgbphbpibjJbpjbpkaPXaLoaLobplbpmaLoaLmbpnaLoaLoaLobpoaLoaRqaLmaRjbppbkabpqbprbpsbptbpubpvbpwbpxbnSbnSbnSbnSbnSbnSbnSbnUbpybkdbpzbpAbpBbpCbzrbnWbnWbpDbpEbksbpFbpGbksbmsbkybpHbpIbpJbpKbmxbpLbofbpMbpNbpObpPbpQbpRbmFbpSbpTbpUbkEbpVbotbotbpWbpXbpYbkEbpZbowbqabksaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckbckaaaaaaaaaaaaaaaaaaaaaaaaaaabqbbqcbqdbqebqfbqgbqhazabqiazabhGbkPbqjbhGbqkbqlbhGbhGbhGbqmbqnbqobqpbqobqobqobqpbqoaQRaQRbcLbcLbngbqqbcLbqrbqrbqrbqrbqrbqrbqsbqtbqubqvbqwbqxbqybqxbqzbqAbqBbqCbqDbqEbqFbbnaZHbjFbqGbqHbqIbqJbqKbqLbqMbqNbqObqPbqQbjJbqRbqSbqTbjJbqUbqVbjJbqUbqWbjJbqRbqXbqSbqSbqTbjJbqYaRjaLobnJbnKbnLbqZbrabrbbrcbpwbrdbnSbrebrfbrgbrhbribrjbrkbrlbkdbrmbrnbrobrpbmpbnWbmpbkmbpEbksbrqbqabksbmsbkybrrbrsbrtbpKbmxbrubrvbrwbrxbrybrzbrzbrzbmFbrAbrBbrCbkEbrDbrEbrFbrGbrHbrIbkEbpZbowbrJbksaaaaaaaaaaaaaeHaeHaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbbrKbrLbrMbrNbrObrObrPbrQbrRbhGbrSbrTbrUbrVbrWbrXbrYbrZbsaaeHbsbbsbbsbbsbbsbbsbbsbaaaaaabscbsdbsebsfbsgbshbshbshbshbshbshbsibsjbskbslbsmbsnbsobspbcRbcRbsqbcRbcRbcRbsrbssbstbjFbsublzbsvbswbsxbsybszbntbszbszbsAbsBbsCbsDbsEbsFbsGbsHbjJbsGbsIbsFbsJbsKbsLbsLbsMbjJbsNaRjaLobkabsObsPbsQbsRbsSbsTbpwbsUbnSbsVbsWbsXbsYbsZbtabtbbtcbkdbkmbtdbtebtfbtgbthbmpbkmbpEbksbtibtjbksbtkbkybpHbpIbpJbpKbmxbtlbkubtmbtnbtmbrzbtobtobmFbtpbtqbtrbkEbtsbttbtubtvbtwbtxbkEbovbowbtybksaaaaaaaaaaaaaeHbtzbtAbtBbtAbtBbtAbtCaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabckbckbckbckaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqbbrKbrLbrMbrNbrObrObrPbrQbrRbhGbrSbrTbrUbrVbrWbrXbrYbrZbsaaeHbsbbsbbsbbsbbsbbsbbsbaaaaaabscbsdbsebsfbsgbshbshbshbshbshbshbsibsjbskbslbsmbsnbsobspbcRbcRbsqbcRbcRbcRbsrbssbstbjFbsublzbsvbswbsxbsybszbntbszbszbsAbsBbsCbsDbsEbsFbsGbsHbjJbsGbsIbsFbsJbsKbsLbsLbsMbjJbsNaRjaLobkabsObsPbsQbsRbsSbsTbpwbsUbnSbsVbsWbzYbHlbsZbtabtbbtcbkdbkmbtdbtebtfbtgbthbmpbkmbpEbksbtibtjbksbtkbkybpHbpIbpJbpKbmxbtlbkubtmbtnbtmbrzbtobtobmFbtpbtqbtrbkEbtsbttbtubtvbtwbtxbkEbovbowbtybksaaaaaaaaaaaaaeHbtzbtAbtBbtAbtBbtAbtCaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtDaxMbtEbtEbtFaVLbtGaAoarPbtHbtGbhGbhGbhGbhGbhGbhGbhGbhGbtIbtJaaabsbbsbbsbbsbbsbbsbbsbaaaaaabtKbtLbqrbtMbtNbtNbtNbtNbtNbtObtNbtPbtNbtQbtRbtSbtTbtUbtVbcRbtWbfhbtXbtYbtZbqFbuabubbjFbucbudbuebufbugbuhbszbntbszbszbsAbszbuibujbukbulbumbunbuobupbuqburbusbutbuubuubuvbuwaLmbgLbuxbkabuybuzbuzbuAbuBbuCbpwbuDbuEbuFbuGbuHbuIbuGbuJbuKbuLbuMbkmbuNbuObuPbkmbkmbkmbkmbpEbksbksbksbksbmsbkybuQbuRbuRbuSbmxbuTbuUbuVbuWbuXbuYbuZbuZbkybvabvbbvcbkEbvdbvebvfbvgbtwbvhbkEbpZbpGbksbksaaaaaaaaaaaaaeHbvibvjbvkbvlbvlbvmbviaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbvobvpbvqbvrbqrbqrbqrbvsbvsbvsbvsbvtbqrbvubqrbqubvvbvwbvxbvybvzbvAbvBbfhbvCbvDbvEaLobvFaLobjFbvGbvHbpcbvIbvJbvKbszbvLbvMbvNbvObvNbvPbvNbvNbvNbvNbvQbvRbvSbvTbujbujbvUbujbvVbvWbvXbvYbvZaThbkabwabwbbwcbwdbwebwfbpwbwgbwhbwibwjbwkbwlbwmbwibwnbwhbwibkmbkmbwobkmbkmbnZbwpbnZbpEbwqbpEbpEbpEbmsbkybwrbmxbmxbwsbwtbwtbwubwvbwwbwtbwtbwxbwybkybwzbwAbwzbkEbwBbwCbwDbwEbotbwFbkEbpZbwGbksaaaaaaaaaaaaaaaaeHbwHbwIbvkbvlbvkbwJbtBaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbwKbwLbwMbwNbwObqrbqrbqrbqrbqrbqrbvtbqrbwPbcLbcLbwQbgEbwRbwSbwTbwUbwVbfhbwWbwXbwYaLobvFaLobjFbwZbxabxbbxcbxdbjJbxebqUbxfbxgbxhbxibxjbxkbszbxlbxlbxmbxlbxlbxlbxlbxnbxobxobxobxobxobxpbjZbjYbkabxqbxrbxsbxtbxubxvbpwbxwbxxbxybxzbxAbxBbxCbxDbxEbxFbxAbxGbxHbxIbxAbxJbnZbnZbnZbnZbnZbnZbnZbnZbxKbxLbxMbxNbxObxPbxQbxQbxRbxQbxSbmubmubxTbxUbkybxVbxWbxXbxYbxZbyabybbycbydbkEbkEbyebksbksbyfbygbygbyhbyibombvibvlbvkbvlbvlbyjbviaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaahaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbykbylbykbymbqrbqrbqrbvsbvsbvsbvsbvtbqrbynbyobcLbypbyqbwRbwSbyrbysbwVbytbyubyvbywaXMbyxaLobjFbjFbyybjFbjFbjFbjJbyzbyzbyAbyBbyCbyBbyDbxobyEbyFbyGbyHbyIbyJbyIbyGbyKbxobyLbyMbyNbyObyPblUbyQbkabyRbySbyTbyTbyUbyVbpwbyWbyXbyYbyZbzabzbbzcbzdbzebzfbzgbzhbzibzjbzkbzlbzmbznbzobzpbzqbzobznbzmbmsbkybzrbzsbmxbztbzubzubzvbzwbzxbzybzzbzAbzBbmybzCbzDbzEbzFbzGbzGbzHbzIbzJbwzbzKbzLbzMbzNbzObzPbzQbzQbzRbzSbzTbtAbtBbzUbtBbtAbzVaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbzWbvpbzXbzYbqrbqrbqrbqrbqrbqrbqrbvtbqrbzZbAabcLbAbbAcbAdbAebAfbAgbAhbAibAjbAkbtZaLoaZxaLobjFbAlbAmbAnbAobApbjJbAqbArbArbArbAsbAtbAubAvbAwbAxbAwbAybAzbAAbAzbAAbAzbABbACbADbAEbAFaLmbgLbAGbkcbpwbpwbAHbAIbAJbAKbpwbALbAMbANbAObAObAPbAQbAObAObANbARbASbATbATbAUbATbzmbAVbAWbAXbAYbAZbAWbzmbBabkybkybkubkubkubkubkubkubkubkubBbbBcbBdbBebBfbBgbBhbBibBjbpTbpTbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubpTbBvbombBwbyhbyibBxbombByaaaaeHaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbvobvpbvqbvrbqrbqrbqrbvsbvsbvsbvsbvtbqrbvubqrbqubvvbvwbvxbvybvzbvAbvBbfhbvCbvDbvEaLobvFaLobjFbvGbvHbpcbvIbvJbvKbszbvLbvMbvNbvObvNbvPbvNbvNbvNbvNbvQbvRbvSbvTbujbujbvUbujbvVbvWbvXbvYbvZaThbkabwabwbbwcbwdbwebwfbpwbJTbwhbwibwjbwkbwlbwmbwibwnbwhbwibkmbkmbwobkmbkmbnZbwpbnZbpEbwqbpEbpEbpEbmsbkybwrbmxbmxbwsbwtbwtbMobwvbwwbwtbwtbwxbwybkybwzbwAbwzbkEbwBbwCbwDbwEbotbwFbkEbpZbwGbksaaaaaaaaaaaaaaaaeHbwHbwIbvkbvlbvkbwJbtBaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbwKbwLbwMbwNbwObqrbqrbMFbqrbqrbqrbvtbqrbwPbcLbcLbwQbgEbwRbwSbwTbwUbwVbfhbwWbwXbwYaLobvFaLobjFbwZbxabxbbxcbxdbjJbxebqUbxfbxgbxhbxibxjbxkbszbxlbxlbxmbxlbxlbxlbxlbxnbxobxobxobxobxobxpbjZbjYbkabxqbxrbxsbxtbxubxvbpwbxwbxxbxybxzbxAbxBbxCbxDbxEbxFbxAbxGbxHbxIbxAbxJbnZbnZbnZbnZbnZbnZbnZbnZbxKbxLbxMbxNbxObxPbxQbxQbxRbxQbxSbmubmubxTbxUbkybxVbxWbxXbxYbxZbyabybbycbydbkEbkEbyebksbksbyfbygbygbyhbyibombvibvlbvkbvlbvlbyjbviaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaahaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbykbylbykbymbqrbqrbqrbvsbvsbvsbvsbvtbqrbynbyobcLbypbyqbwRbwSbyrbysbwVbytbyubyvbywaXMbyxaLobjFbjFbyybjFbjFbjFbjJbyzbyzbyAbyBbyCbyBbyDbxobyEbyFbyGbyHbyIbyJbyIbyGbyKbxobyLbyMbyNbyObyPblUbyQbkabyRbySbyTbyTbyUbyVbpwbyWbyXbyYbyZbzabzbbzcbzdbzebzfbzgbzhbzibzjbzkbzlbzmbznbzobzpbzqbzobznbzmbmsbkybMJbzsbOBbztbzubzubzvbzwbzxbzybzzbzAbzBbmybzCbzDbzEbzFbzGbzGbzHbzIbzJbwzbzKbzLbzMbzNbzObzPbzQbzQbzRbzSbzTbtAbtBbzUbtBbtAbzVaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbzWbvpbzXbUObqrbqrbqrbqrbqrbqrbqrbvtbqrbzZbAabcLbAbbAcbAdbAebAfbAgbAhbAibAjbAkbtZaLoaZxaLobjFbAlbAmbAnbAobApbjJbAqbArbArbArbAsbAtbAubAvbAwbAxbAwbAybAzbAAbAzbAAbAzbABbACbADbAEbAFaLmbgLbAGbkcbpwbpwbAHbAIbAJbAKbpwbALbAMbANbAObAObAPbAQbAObAObANbARbASbATbATbAUbATbzmbAVbAWbAXbAYbAZbAWbzmbBabkybkybkubkubkubkubkubkubkubkubBbbBcbBdbBebBfbBgbBhbBibBjbpTbpTbBkbBlbBmbBnbBobBpbBqbBrbBsbBtbBubpTbBvbombBwbyhbyibBxbombByaaaaeHaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbykbylbykbBzbBAbqrbqrbqrbqrbBAbqrbvtbqrbzZbBBbcLbBCbfhbwRbBDbfhbjDbBEbfhbAcbBFbvEaLobBGbBHbBIbBJbBKbBLbBMbBNbjJbBObArbArbArbBPbArbBQbBRbBSbAwbAxbBTbBUbAwbAxbAwbBVbxobBWbBXbBYbxoaLmaRjbBZbCabCbbCcbCdbCebCfbCgbChbCibAMbCjbCkbClbCmbCnbCobCpbCjbCqbCrbCsbCtbCubCvbCwbCxbCybCzbCAbCBbCCbzmbCDbCEbvabwzbCFbCGbBqbCHbCIbCJbCKbBqbCLbCMbCNbBqbCObCPbBibCQbCRbCSbCTbCTbCTbCTbCTbCUbCVbCWbyfbCXbombpTbzQbCYbCZbDabDbbDcbDdaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbDebDfbDebDgbDhbDibDibDibDibDibDjbDkbqrbDlbDmbcLbDnbDobDpbDqbDrbsobDsbDtbDubcRbcRbDvaRjbDwbjFbDxbDybDzbDAbDBbjJbDCbDDbDEbArbDFbDGbDHbDIbDJbDKbAwbDLbDMbDNbDObDPbDQbxobDRbDSbDTbxoaLmaRjbBZbCabDUbDVbDWbDXbDYbDZbEabEbbAMbEcbEdbEebEfbEgbEhbEibEcbEjbEkbElbEmbCubEnbEobEpbEqbErbEsbEtbEubEvbEwbExbEybEzbEAbEBbECbEDbECbEEbECbECbEFbEGbEHbECbEIbEJbBibEKbELbEMbENbEObEPbEQbCTbERbESbETaeHaeHbombEUbEVbEWbEWbEXbEYbEZbomaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbbFabFbbFcbcLbcLbFdbvpbvpbvpbFebcLbcLbFfbFgbFhbcLbFibFibFibFjbFibFkbFlbFmbFnbFobFkbflaRjbDwbjFbjFbjFbjFbjFbjFbjJbjJbFpbFqbFqbFrbjJbjJbxobxobFsbFtbFubFvbxobxobxobxobxobxobxobxobxoaLmaRjbFwbFxbFybFzbFAbFBbFCbFCbFCbFDbAMbFEbFFbFGbFHbFIbFJbFKbAObFLbFMbElbFNbFObFPbFQbFRbFSbFTbFUbFVbFWbFXbFYbFZbGabGabGabGabGabGbbGabGabGcbGdbGebGdbGdbGfbGgbGhbBibEKbGibGjbGkbGlbGmbGnbCTbERbESbGoaaaaaabombGpbGqbombzSbombombzSbomaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGraeHaaaaaaaaaaaabFibGsbGtbGubGvbFkbGwbGxbGybGzbFkaTpaRjbGAaLobGBaLobGCbGDbGEbGFbGGaLoaLoaLoaLoaLobGHbGGbGIaLobGJbGKbGLbGMbGNbGObGEbGFbGPaLobGBaLoaLmaRjbGQbGRbGSbGTbGUbGVbGWbGXbGYbGZbAMbEcbHabEebHbbHcbHdbHebEcbHfbFMbElbHgbHhbHibCwbHjbHkbHlbHmbHnbHobzmbBabnZbGabHpbHqbHrbHsbHtbHubHvbGcbHwbHxbHybGdbGdbHzbGhbBibHAbHBbHCbHDbHEbHCbHFbCTbERbHGbCWbCWbCWbCWbCWbombomaaaaaaaeHaaaaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaaaaaaaaaaaaaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGraeHaaaaaaaaaaaabFibGsbGtbGubGvbFkbGwbGxbGybGzbFkaTpaRjbGAaLobGBaLobGCbGDbGEbGFbGGaLoaLoaLoaLoaLobGHbGGbGIaLobGJbGKbGLbGMbGNbGObGEbGFbGPaLobGBaLoaLmaRjbGQbGRbGSbGTbGUbGVbGWbGXbGYbGZbAMbEcbHabEebHbbHcbHdbHebEcbHfbFMbElbHgbHhbHibCwbHjbHkbVYbHmbHnbHobzmbBabnZbGabHpbHqbHrbHsbHtbHubHvbGcbHwbHxbHybGdbGdbHzbGhbBibHAbHBbHCbHDbHEbHCbHFbCTbERbHGbCWbCWbCWbCWbCWbombomaaaaaaaeHaaaaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaaaaaaaaaaaaaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbbsbbsbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFibHHbHIbHJbHKbHLbHMbHNbHObHPbFkaLobHQbHRaOvaOvaOvbHSbHTbHUbHVbHWaOvaOvaOvaOvaOvbHXbHYbHZaOCaOCaOCbIabHSbIbbIcbIdbIebIfbgVbIgbgVbIhbIiaLobIjbIkbIlbImbInbIobIpbIqbIrbIsbFEbItbIubHdbEgbHdbIvbAObFLbFMbIwbIxbIybIzbIAbIBbICbIDbIEbIFbIGbzmbmsbIHbGabIIbIJbIKbILbIMbINbIObGcbIPbIQbIRbIRbGdbISbITbIUbIVbIWbIXbIXbIYbIZbJabCTbERbESbCWbJbbJcbJcbCWaeHaeHaeHaeHaeHaeHaeHaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHbJdbJebJebJfbJgbJgbJhbJhbJhbJhbJiaeHaeHaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbaaaaaaaaaaaaaaaaaaaaaaaabJjbJkbJlbJkbJmaaaaaaaaabFibFibJnbJobJpbJobJqbJrbGybJsbJtbFkaPYaLobDwbJubJvbJwbJxbGObGEbGFaLoaLobJvaPYbJuaLobJybJzaQaaQabJAaQabJBbJCbJDbJEbJFbJGbJHbJIaQdbJJaLoaLobJKbFybFybFybFybFCbJLbJMbJNbJObAMbEcbJPbJQbEfbEgbEhbJRbEcbHfbJSbATbATbATbATbzmbzmbJTbJUbHkbJVbJWbzmbmsbJXbGabJYbJZbHrbKabKbbKcbKdbGcbKebKfbIRbIRbGdbKgbKhbBibCTbKibKjbKkbKlbKmbKnbCTbKobKpbKpbKpbKpbKqbETaaaaaaaaaaaaaeHaaaaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHbKrbKsbKtbKsbJgbJhbJhbKubKvbKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKwbKxbKybKzbKwbKAbKBbKCbFibKDbJobJobKEbKFbKGbKHbKIbKJbKKbFkbKLbKLbKMbKLaJQaJQaJQaJQbKNbKNbKNbKNbKNbKNbKNbKNbKObKPbexbKQbKQbKQbKQbKQbKRbKQbKQbKQbKQbnZbKSbFybFybFybFybFybKTbKUbKVbFCbKWbKXbKYbKZbLabCjbLbbLcbHdbEgbHdbLdbCjbLebLfbLgbLhbLibLjbLkbzmbLlbLmbLnbLobLpbzmbmsbLqbLqbLqbLqbLqbLqbLqbLqbLqbGcbLrbLsbLtbLtbGdbLubLvbLwbLxbLxbLxbLxbLxbLxbLxbLxbLxbLxbLxbLxbLybERbLzaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqbLAbKsbKsbLBbJhbJhbKubKubLCbKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJlbLDbLEbLDbJlbLFbLGbLHbFibLIbLJbJobJpbLKbFkbLLbLMbLNbLObFkbLPbLPbLQbKLaaaaaaaaaaaabKNbLRbLSbLTbLUbLVbLWbKNbLXbLYbLZbKQbMabMbbMcbMdbMebMfbMgbMhbMibMjbMkbFybMlbMmbMnbMobMpbMqbMrbFCbFCbFCbFCbMsbMtbANbAObAObMubMvbMwbAObANbMxbMybMzbMAbMBbMBbMCbzmbMDbMEbMFbMGbMHbzmbmsbLqbMIbMIbMIbMJbMKbMIbMIbMIbGcbMLbMMbMNbMNbGdbMObMPbBibMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbMZbLxbCWbNabCWbNbbNbbNbbNbbNbbNbbNbbNbbNbbNbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabNcbJhbLAbJhbJhbKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKwbLDbLDbLDbNdbNebJobNfbNgbNhbJobJobNibNjbFkbFkbFkbFkbFkbFkbNkbNlbNmbNnaaabNobNpbNqbNrbNsbNtbNubNtbNtbNvbKNbNwbNxbNybKQbNzbNAbNBbNCbNDbNEbNFbKQbKQbNGbMkbFybNHbNIbNJbMpbMpbMqbNKbNLbNMbFAbNNbNObAMbNPbNQbNRbNSbNTbNUbNVbNPbHfbFMbNWbMzbNXbNYbNZbzmbzmbOabzmbzmbzmbzmbtkbLqbObbOcbMIbOdbMIbMIbMIbOebGcbOfbOgbOhbOhbGdbOibOjbBibOkbOlbOmbOnbOobOpbOqbOpbOrbOsbOtbLxbOubOvbOwbNbbOxbOybOzbOAbOBbOCbODbOEbOFaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJgbJhbOGbOHbOHbKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbbsbbsbbsbbsbaaaaaaaaaaaaaaaaaaaaaaaabJjbJkbJlbJkbJmaaaaaaaaabFibFibJnbJobJpbJobJqbJrbVZbJsbJtbFkaPYaLobDwbJubJvbJwbJxbGObGEbGFaLoaLobJvaPYbJuaLobJybJzaQaaQabJAaQabJBbJCbJDbJEbJFbJGbJHbJIaQdbJJaLoaLobJKbFybFybFybFybFCbJLbJMbJNbJObAMbEcbJPbJQbEfbEgbEhbJRbEcbHfbJSbATbATbATbATbzmbzmbWabJUbHkbJVbJWbzmbmsbJXbGabJYbJZbHrbKabKbbKcbKdbGcbKebKfbIRbIRbGdbKgbKhbBibCTbKibKjbKkbKlbKmbKnbCTbKobKpbKpbKpbKpbKqbETaaaaaaaaaaaaaeHaaaaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHbKrbKsbKtbKsbJgbJhbJhbKubKvbKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKwbKxbKybKzbKwbKAbKBbKCbFibKDbJobWbbKEbKFbKGbKHbKIbKJbKKbFkbKLbKLbKMbKLaJQaJQaJQaJQbKNbKNbKNbKNbKNbKNbKNbKNbKObKPbexbKQbKQbKQbKQbKQbKRbKQbKQbKQbKQbnZbKSbFybFybFybFybFybKTbKUbKVbFCbKWbKXbKYbKZbLabCjbLbbLcbHdbEgbHdbLdbCjbLebLfbLgbLhbLibLjbLkbzmbLlbLmbLnbLobLpbzmbmsbLqbLqbLqbLqbLqbLqbLqbLqbLqbGcbLrbLsbLtbLtbGdbLubLvbLwbLxbLxbLxbLxbLxbLxbLxbLxbLxbLxbLxbLxbLybERbLzaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqaqqbLAbKsbKsbLBbJhbJhbKubKubLCbKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJlbLDbLEbLDbJlbLFbLGbLHbFibLIbLJbJobJpbLKbFkbLLbLMbLNbLObFkbLPbLPbLQbKLaaaaaaaaaaaabKNbLRbLSbLTbLUbLVbLWbKNbLXbLYbLZbKQbMabMbbMcbMdbMebMfbMgbMhbMibMjbMkbFybMlbMmbMnbWcbMpbMqbMrbFCbFCbFCbFCbMsbMtbANbAObAObMubMvbMwbAObANbMxbMybMzbMAbMBbMBbMCbzmbMDbMEbWdbMGbMHbzmbmsbLqbMIbMIbMIbWebMKbMIbMIbMIbGcbMLbMMbMNbMNbGdbMObMPbBibMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbMZbLxbCWbNabCWbNbbNbbNbbNbbNbbNbbNbbNbbNbbNbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabNcbJhbLAbJhbJhbKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKwbLDbLDbLDbNdbNebJobNfbNgbNhbJobJobNibNjbFkbFkbFkbFkbFkbFkbNkbNlbNmbNnaaabNobNpbNqbNrbNsbNtbNubNtbNtbNvbKNbNwbNxbNybKQbNzbNAbNBbNCbNDbNEbNFbKQbKQbNGbMkbFybNHbNIbNJbMpbMpbMqbNKbNLbNMbFAbNNbNObAMbNPbNQbNRbNSbNTbNUbNVbNPbHfbFMbNWbMzbNXbNYbNZbzmbzmbOabzmbzmbzmbzmbtkbLqbObbOcbMIbOdbMIbMIbMIbOebGcbOfbOgbOhbOhbGdbOibOjbBibOkbOlbOmbOnbOobOpbOqbXjbOrbOsbOtbLxbOubOvbOwbNbbOxbOybOzbOAbXlbOCbODbOEbOFaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJgbJhbOGbOHbOHbKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabJlbLEbLEbLEbJlbOIbOJbOKbOLbOMbJobONbOObOPbOQbORbORbORbORbORbOSbOTbOUbOVaaabOWbOXbOYbOZbPabNtbPbbPcbPdbPebKNbPfbPgbPhbKQbPibPjbPkbPlbPmbPnbPobKQbpEbPpbPqbFybPrbPsbPtbPubPvbPwbPxbPybPybPzbPAbPBbPCbPDbPEbPFbPGbPHbNSbNSbPIbHfbPJbMzbPKbPLbPMbPNbPObMzbPPbPQbPRbMzbwqbtkbLqbMIbPSbMIbMIbMIbMIbMIbMIbGcbPTbOgbPUbPUbGdbPVbOjbBibPWbPXbPYbPYbMUbPZbQabQbbQcbQdbQebQfbQgbQhbQibQjbQkbQkbQkbQkbQkbQlbQmbOEbQnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabJhbJhbQobKubKubKubKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaabKwbQpbQqbQrbKwbQsbKBbKCbFibFibQtbQubQvbFibFibKLbKLbKLbQwbQxbQybQzbQAbOVaaabOWbQBbQCbQDbQEbQFbQGbQHbQEbQIbQJbQKbQLbQMbKQbKQbKQbKQbKQbKQbQNbKQbKQbQObQPbQQbFybQRbQSbQTbQUbQVbQWbQXbQYbQZbFAbRabRbbRcbNPbRdbRebRfbRgbRhbRibNPbHfbFMbMzbRjbRkbRlbRmbRnbMzbRobRpbRqbRrbRsbmsbLqbLqbRtbMIbMIbMIbMIbLqbLqbGcbRubRvbPUbPUbGdbRwbOjbRxbLxbLxbRybRybLxbRzbRAbRBbRCbRDbREbLxbRFbOvbRGbNbbQkbQkbQkbQkbQkbRHbRIbRJbRKaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJhbKubKubKubKubKubKubRLbKubRMbKubKubKubKubKubJhbJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnbvnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaabKwbQpbQqbQrbKwbQsbKBbKCbFibFibQtbQubQvbFibFibKLbKLbKLbQwbQxbQybQzbQAbOVaaabOWbQBbQCbQDbQEbQFbQGbQHbQEbQIbQJbQKbQLbQMbKQbKQbKQbKQbKQbKQbQNbKQbKQbQObQPbQQbFybQRbQSbQTbQUbQVbQWbQXbQYbQZbFAbRabRbbRcbNPbRdbRebRfbRgbRhbRibNPbHfbFMbMzbRjbRkbRlbXmbRnbMzbRobRpbRqbRrbRsbmsbLqbLqbRtbMIbMIbMIbMIbLqbLqbGcbRubRvbPUbPUbGdbRwbOjbRxbLxbLxbRybRybLxbRzbRAbRBbRCbRDbREbLxbRFbOvbRGbNbbQkbQkbQkbXnbQkbRHbRIbRJbRKaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJhbKubKubKubKubKubKubRLbKubRMbKubKubKubKubKubJhbJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabRNbJkbRObJkbRPaaaaeHaaaaaabFibRQbRRbRSbFiaaaaaabKLbRTbRUbRVbRWbRXbRYbOVaaabOWbRZbSabSbbScbNtbSdbSebSfbSgbKNbShbSibSjbSkbSlbSlbSlbSlbSlbSlbSlbSlbSmbSnbSobFybFybFybFybSpbFybFybFybFybFybFybFybSqbSrbSsbSsbSsbSsbStbSsbSsbSsbHfbFMbSubRmbRkbSvbSwbSxbSybSzbSAbSBbMzbpEbmsbLqbSCbSDbSEbSFbSGbSHbSIbSCbGdbSJbSKbHybGdbGdbHzbOjbBibSLbSMbSNbSObSPbSQbSRbSSbSTbSUbSTbSVbCWbSWbCWbNbbSXbSYbSZbTabTabTbbTcbTdbNbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabJhbTebTebTebTebTebTebTfbKubTgbTebRMbKubKubKubKubJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaaaeHaaaaaaaaaaeHaaaaaabKLbThbTibTjbTkbTlbTmbTnaaabTobNpbTpbTqbTrbNtbNtbNtbTsbTtbKNbTubTvbTwbTxbTxbTxbTxbTxbTxbTxbTxbTybJXbpEbTzbTAbTBbTBbTCbTDbTEbTEbTEbTFbTEbTEbTEbTGbTHbTIbTEbTJbTEbTKbTLbTMbwibTNbTObMzbTPbTQbTRbTSbTTbMzbTUbPPbTVbMzbpEbmsbLqbTWbTXbTYbTZbTZbUabUbbUcbGdbGdbGebGdbGdbUdbpTbOjbpTbSLbUebUfbUgbUhbUibUjbUkbUlbUmbUnbUobUpbUqbESbNbbNbbNbbNbbNbbNbbUrbUsbUsbUtaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUubKsbKsbKsbKsbKsbKsbKsbUvbKvbKubKubKubKubUwbKvbJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbKLbKLbKLbKLbKLbUxbUybKLaaaaaaaaaaaabKNbUzbUAbUBbUCbKNbUDbKNbUEbUFbUGbUHbUHbUIbUJbUKbULbUMbUHbUHbUHbUHbUHbUNbUHbUHbUHbUHbUHbUHbUHbUObUHbUHbnZbnZbnZbnZbnZbnZbnZbnZbUPbwibwibUQbFMbMzbURbUSbUTbUUbUVbMzbUWbUXbUYbUZbpEbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVlbVmbVnbVobVnbVnbVpbVqbLxbVrbVsbVtbVubVvbVwbUobVxbVybVzbUobVAbVBbESbESbESbCWaeHaaabNbbNbbNbbNbbNbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabJhbOHbOHbOHbOHbOHbOHbVCbKubOGbOHbVDbKubKubKubKubJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabVEbVFbQAbKLbKLbKLbKLbKLbKNbKNbKNbKNbKNbKNbKNbKNbVGbVHbVIbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfaeHaaaaaaaaaaaaaaaaaabnZbUPbwibWgbWhbFMbWibWjbMzbWkbMzbMzbMzbMzbMzbMzbMzbpEbWlbLqbWmbWmbWnbWobWpbTZbTZbTZbWqbWrbpTbpTbpTbWsbWtbWubBtbOobWvbWwbWvbWxbWybWzbUkbWAbWAbWBbUobWCbWDbWEbWFbWGbCWaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJhbKubKubKubKubKubKubRLbKubVDbKubKubKubKubKubJhbJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWHaaaaeHbWIbWJbWJbWKbWLbWMbWNbWNbWObWPbWQbWRbWSbWTbWUbWVbWUbWWbWRbTubTvbWXbWYbWZbXabXbbXcbXbbXdbVQbXebVSbVTbXfbXgbXhbXibXjbXkbXkbXkbXlbXmbXnbXobXpbXqbXqbXqbXqbXqaaabnZbUPbwibXrbXsbFMbXtbXubXvbXwbXxbXybXtbXzbXAbXBbXCbpEbmsbLqbXDbXEbXFbXGbXHbXIbXJbLqbLqbvabvabvabvabvabXKbXLbXMbLxbLxbLxbLxbRybLxbXNbXObXPbXPbXPbXObXQbXRbXSbXSbXTbCWaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabJhbJhbQobKubKubKubKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXUbXVbXWbXXbXXbXYbXZbXZbXZbXZbXZbXZbXZbXZbYabYbbWRbYcbWSbWSbWUbYdbWWbWRbYebYfbYgbYhbYibYjbYkbYlbYmbYnbVQbXkbYobYpbYqbYrbYsbYtbYubXkbXkbXkbYvbYwbYxbYybYzbYAbYBbYCbYDbXqaaabnZbUPbwibYEbYFbFMbYGbYHbYHbYIbYJbYKbXtbYLbYMbYNbXCbpEbmsbLqbLqbLqbLqbLqbLqbLqbLqbLqbYObYPbpEbYQbYRbvabvabYSbvabvabYTbYUbLxbYVbLxbYWbLxaeHaeHaeHbLxbWCbYXbESbCWbCWbCWbCWaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJgbJhbTgbTebTebKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaeHaeHbYYbYZbYZbZabZbbZcbZdbZebZfbZgbZhbZibXZbZjbYbbWRbZkbWSbWTbWSbWUbZlbWRbZmbTvbWXbWYbZnbXkbXkbZobZpbZqbZrbZsbZtbZubZvbZwbZxbZybZzbXkbXkbXkbZAbZBbZCbXobXpbZDbZEbYDbZFbXqaeHbnZbUPbwibZGbZHbFMbZIbZJbYHbZKbZLbZMbXtbZNbZObZPbXCbZQbZRbZSbZSbZSbZSbZSbZSbZSbZSbZSbZSbZSbZSbZTbZSbZUbZVbZWbZXbZYbESbZZbLxbLxbLxbYWbLxbLxbLxbLxbLxcaacabcaccaccadcaebCWbCWbCWbCWaeHaaaaaaaaacafcafcafaeHaaaaaaaeHaaaaaaaeHaaaaaabNcbJhbLAbJhbJhbKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHcagcahcaicajcakcalcamcancaocapcapcaqbXZcarcascatcaucavcawbWSbWScaxbWRbZmbTvbWXbUHbUHcaycazcaAcaBcaCcaDbZscaEcaFcaGbXkcaHbXicaIcaJcaKcaLcaMcaNcaOcaPcaQcaRcaSbYDbYDbXqaeHbnZbUPbwibwicaTbFMbZIcaUbZJcaVcaWbYKbXtcaXcaYcaZbXCcbabmscbbcbcbpEcbdcbdcbebpEcbfcbgbnZbnZcbhcbibnZbnZcbjcbkcblcbmcbncbobKpbKpbKpcbpbKpbKpbKpbKpcbqcbrbESbESbEScbscbtcbucbvcbwcbxcbycbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbAcbBcbBcbCbJhbJhbKubKucbDbKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHcagcbEcbFcbGcbHcbIcbJcbKcbLcbMcbMcbNbXZcbOcbPbWRcbQbWScbRbWScbScbTcbUcbVcbWcbXcbYcbZccabVQccbcccccdbVQccecaEccfccgbXkcchbXicaIcaJccicaLccjcckbXkbXobXpbXqbXqbXqbXqbXqaeHcclbUPccmbwiccnbEkccobYHbYHccpccqccrbXtccscctccubXCbpEbmsbnZbnZccvbnZbnZcbhccwccxbnZbnZaaaaaaaaaaaaccycczccAccBccCccCccDccEccEccFccCccCccGccHccHccIccCccJccKccLccMccNbCWbCWbCWbCWaeHaaaaaaaaacafcafcafaeHaaaaaaaeHaaaaaaaeHaeHaeHccOccPccQbLBbJgbJhbJhbKubKvbKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHcagccRccSccTccUccVcaoccWcaoccXcaoccYccZcdacdbbWRcdcbWScbRbWSbWScddbWRcdecdfbWXcdgcdhbXkcdicdjcdkcdlcdmcdncdocdpcdqbXkcchbXicdrbXkcdscdtbZAcducdvbYybYzbYAcdwcdxcdxbXqaeHcdybUPcdzbwicdAbCrbXtcdBcdCbYIcdDcdEbXtcdFcdGcdHbXCbpEbmsbnZcdIbpEcdJbnZaaaaeHaaaaaaaeHaaaaaaaaaaaacdKcdLcdMcdLccCcdNcdOcdPcdQcdRcdScdTcdUcdVcdVcdWccCcdXcdXcdXcdYcdZcdXaaaaaaaaaaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHceabJebJebJfbJgbJgbJhbJhbJhbJhbJiaeHaeHaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHbYYbYZcebceccedceecefcegcehceicejcekbXZcelcembWRcenbWSceocepceqcerbWRcesbTvbWXcetceucevcewcexcexceycezceAceAceBceCcexceDceEceFbXkcaIcdtbZAceGceHbXobXpbZDceIceJceKbXqaeHcdybUPceLbwibARbASbXtbXtbXtceMbXtbXtbXtceNceOcePbXCbwibmsbnZceQceRceSbnZaaaaeHaaaaaaaeHaaaaaaaaaaaaceTceUceVceWceXceYceZcfacfbcfccfdcfecffcdVcdVcfgccCaaacdXcfhcficfjcdXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaaaaaaaaaaaaaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacafcafcafcafagvcalcalcalcakcalbXZbXZbXZbXZbXZbXZbXZcelcbPbWRbWRbWRbWRbWRbWRbWRbWRcfkbYfbWXcflcfmcfncfocfpcfqcfrcfscftcfucfvcfwcfxcfycfzcaIcfAcfBbWebYvcfCcfDcfEcaQcaRcfFcdxcdxbXqaeHcdycfGcfHbwicfIcfJcfKcfLbCgcfMcfNcfOcfPcfQcfPcfPcfRcfSbmsbnZbnZbnZbnZbnZaaaaeHaaaaaaaeHaaaaaaaaaaaacfTcfUcfVcfWcfXcfYcfZcgacgbcgccgdcgecgfcggcghcgiccCaaacdXcgjcgkcglcdXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgmcgncgncgocgpbKLcgqcgrcgscgtcgsbWNcgubWNbWNcgscgvcgscgwcgxcgycgzcgAcgBcgAcgAcgCbKLcgDcgEcgFcgGcgHcgIbUHbUHcgJbUHbUHcgKbUHcgLcgMcgNcgObUHcgPcgQcdscdtbZAceGcgRbUHbXpbXqbXqbXqbXqbXqaeHcgScgTcgUcgVcgWcgXcgYcgZchachbchcchdchdchechdchfchgbwichhchibnZaeHaeHaeHaeHchjaeHaeHaeHaeHaeHaeHaeHchkccychlccychmchnchochpchqchrchschtcffcdVcghchuccCaaacdXchvchwchxcdXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachychzchAchBbNkchCchDchEbNkchFbNkchGchHchHchHchIchJchJchKchLchMchNchLchLchObNkchPbKLbZmbTvbWXchQchRchSchTchTchSchTchUchVchRchWcdqchXbXkbXkcdrbXkcaIcdtbZAchYchZciabYzbYAcibciccidbXqaeHbnZbUPcieciecifcigcifcihciicijcikcilcilcilcilcilcimcincinbmsbnZaeHaaaaaaaaaaeHaaaaaaaeHaaaaaaaaaaaaccyciocipciqccCcircirchpchqciscitciucffcdVcdVcivccCaaaciwcixciycizciAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBcgncgncgochFbKLbNkchEciCciCciCciCciCciDciDciEciFciGciHciIciJciKciLchLciMbNkchPbKLciNciObWXciPciPciQciPciRciSciPciQciPbUHciTciUchXcdscfAciVcfAcfBciWbZAceGciXbXobXpbZDciYciZcjabXqaeHbnZbUPciecjbcjccjdcjecifcjfcjgcjhcjicjjcjkcjlcilcjmcjncinbmsbnZaeHaaaaaaaaaccyccyccyccyccyccyccyccyccycjocjpcjqccCcjrcjscjtcjucjvcjwcjxcffcjycjzcjAccCaaaaeHcjBcjCcjBaeHaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacafcafcafcafagvchHcjDciCcjEcjFcjGcjHcjIciDcjJcjKcjLcjMcjNcjOcjPcjQchLchLchLcjRbKLcjScjTcjUciPcjVcjWcjXcjYcjZckackbckcbUHckdckechXcdrbXkcaIcaJckfcdtbYvckgckhcaPcaQcaRckiciccicbXqaeHbnZbUPcieckjckkcklckmcihcknckockpckqckrckscktcilckuckvcinbmsbnZaeHaaaaaaaaaccyckwckxckyckzckAckBckCckDckEckFckGccyccCccCccCccCccCccCccCccCccCccCccCccCaaaaeHckHckIckHaeHaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafagAagAaafagAagAagAahnagAagAagAaafaafaaaaaaaeHaeHaaaaaaaaaaaaaaaaaaaeHckJckKckLckMckNckOckPckQckRckScjKcjLcjMcjNcjOckTckUckVckWchLckXckYckZclaclbciPclccldcldcleclfcldcldclgclhclicdqcljclkcllclmcaJclncdtbZAceGbXkbXoclobXqbXqbXqbXqbXqaeHbnZbUPcieclpclqclrclscifcltcijclucilcilcilcilcilclvclwcinbmsbnZaeHaeHaeHaeHccyclxclyclxclzclAclBclCckDckDclDckDccyccyaaaaaaaaaaaaaeHaeHaaaaaaaaaaaaaaaaaaaeHaaaclEaaaaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaeHaeHaaaaeHaeHaaaaaaaeHaeHaeHaaaaafaaaaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaclFckKclGclHclIclIclJclKclLckSclMcjLclNclOcjOckTcjKclPcjKclQclRclSclTclUbWXclVclWclXclXclYclZclXclXcmabUHcmbcmccgNcmdchXbXkbXkbXkbXkbZAcmecmfbYybYzbYAcmgcmhcmhbXqaeHbnZbUPciecmicmjcmkcmlcihcmmcmncjhcmocmpcmqcmrcmscmtcmucinbmsbnZaeHaaaaaaaaaccyclxclxclxcmvcmwcmxcmycmzcmAcmBcmCcmDccyaaaaaaaaaaaaaaaaeHaeHaaaaaaaaaaaaaaaaeHaaacmEaaaaeHaeHaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacmFcmGcmHaaacmFcmGcmHaaacmFcmGcmHaeHcmIaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaclFcmJcmKcmLclIclIcmMcmNcmOcmPcmQcmRcmScmTcmUcmVcmWcmXcmWcmYcmZcnacnbcnccndcnecnfcngcngcnhcnicngcngcnjcnkcnlcnmcnncnocnpbXkbXkbXkbXkbZAceGcnqbXobXpbZDcnrcnscntbXqaeHbnZbUPciecnucnvcnwcnxcifcnyckockpcnzcnAcnBcnCcmscnDcnEcinbmsbnZaeHaaaaaaaaaccyckDckDckDckDcnFceUcnGcnHcnHcnIceUcnJccyaaaaaaaaaaaaaaaaaaaaeaaeaaecnKaeHaeHaeHaeHcmEaeHaeHaeHaeHaeHahnaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacmFcnLcmHaaacmFcnLcmHaaacmFcnLcmHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaeHaeHaeHclFckKcnMcnNcnOcnPcnQcnRcnScnTcnUcnVcnWcnXcnYcnYcjKcnZcoacobcoccetcodcoecofcogcohcoicoicojcokcoicoicolcnkcomconcoocopbYvcaLcaLcaLcoqcorcoscotcaPcaQcaRcoucmhcmhbXqaeHbnZbUPciecovcowcoxcoycihcozcoAcoBcmscmscmscmscmscoCcoDcinbmsbnZaeHaaaaaaaaaccyckwckxckycoEcoFcnHcoGceUceUcoHceUcoIccyaaaaaaaaaaaaaaaaaaaaeaaaaeHaaaaeHaaaaaaaaacoJaaaaeHaeHaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaagAaeHcmFcnLcmHaaacmFcnLcmHaeHcmFcnLcmHaeHaaaaaaaeHaeHaaaaaaaaaaaaaaaaeHaaaaaacoKcoLciCcoMcjFcoNcoOcoPciDcoQcoRcoScoTcoUcoVcoWcjKcjKcoXcoYcoZcpacpbcpccpdciPcpecpfcpgcphcpicpjcpkcplbUHcpmcpnchXcpocppceAcllcpqcprcpscptcpubXobXpbXqbXqbXqbXqbXqaeHbnZbUPcieciecpvciecieciebwicpwbwibwicpxbwqcpycincincincinbmsbnZaeHaeHaeHaeHccyclxclxclxcpzclAceUcpAcpBcpCcpDceUcpEccyccyccyccyaaaaaaaaaaaeaaacpFcpFcpFcpFcpFaeHcpGaeHcpFcpFcpFcpFcpFaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaacmFcnLcmHaeHcmFcnLcmHaaacmFcnLcmHaaaaaaaaaaaaaaaaeHaaaaeHaaaaeHaeHaaaaaabKLckKciCciDcpHcpIcpIcpJciDcpKcpLclPcpMcpNcpOcpPcjKcpQcpRcpScpTcetcodcetcpUciPciPcpVciPciPciPcpWcpXcpYbUHcpZcljcqacqbcqccqdcqecqfcqgcllcqhcqibYycqjaeHaeHaeHaeHaeHaeHbnZcqkcqlcqmcqncqmcqocqpcqqcqrcqscqtbZSbZSbZSbZSbZSbZSbZScqubnZaaaaaaaaaaaaccyclxclxclxcoEcqvcnHcqwcqxcqycqzceUceUcqAcqBcqCccyaeHaeHaeHaaeaeHcqDcqEcqEcqEcqEcqFcpGcqGcqHcqHcqHcqHcqIaeHaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafagAaeHaaacmFcnLcmHaeHcmFcnLcmHaaacmFcnLcmHaeHaaaaaaaaaaaaaeHaeHcqJcqKcqKcqKcqKbKLbKLcqLchLcqMcqNcqOcqPcqPcqPcqQcqRcqScqTcqUcqVcpPclMcjKcqWchLcqXcqYcqZcracrbcrccrdcrecrfcrgcrccrhcribtJbUHcrjcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucaDaeHaeHaaaaaaaaaaaaaeHbnZcrvcrwcrxcrycrzcrAbnZcrBcrCcrBbnZbnZbnZbnZbnZbnZbnZbnZbnZbnZaaaaaaaaaaaaccyckDckDckDckDcrDceUcpAcrEcrFcrGceUceUcrHceUcrIccyaaaaaaaaaaaeaeHcrJcrJcrJcrJcrJaaacpGaaacrJcrJcrJcrJcrJaeHaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaeHaaaaeHaeHcrKaeHaeHaeHcrKaeHaaaaeHcrKaeHaaaaaaaaaaaaaaacrLcrMcrNcrOcrPcrQcrRcrScrTcrUchLcrVcrWcrXcrYcrZcsacsbcsccsdcpMcsecsfcpPcjKcjKcsgchLchLchLcshcsicsjcrccskcslcsmcsncrccsocricspbUHcsqcsrcsscstcsucsvcsscswcsucsvcsscsxbUHaeHaeHaaaaaaaaaaaaaaacsybpEbpEcszcsAcsBcsCcsDcsEcsFcsGcsDaeHaeHaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaccyckwckxckycsHcoFcnHcoGceUceUcsIceUcsJcsKcsLcsMccyaaaaaaaaaaaeaaaaeHaaaaeHaeHaeHaaacpGaaaaeHaaaaeHaaaaeHaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaaaeHaaaaaaaaaaeHaaaaaabKLbThbTibTjbTkbTlbTmbTnaaabTobNpbTpbTqbTrbNtbNtbNtbTsbTtbKNbTubTvbTwbTxbTxbTxbTxbTxbTxbTxbTxbTybJXbpEbTzbTAbTBbTBbTCbTDbTEbTEbTEbTFbTEbTEbTEbTGbTHbTIbTEbTJbTEbTKbTLbTMbwibTNbTObMzbTPbTQbTRbTSbTTbMzbTUbPPbTVbMzbpEbmsbLqbTWbTXbTYbYubTZbUabUbbUcbGdbGdbGebGdbGdbUdbpTbOjbpTbSLbUebUfbUgbUhbUibUjbUkbUlbUmbUnbUobUpbUqbESbNbbNbbNbbNbbNbbNbbUrbUsbUsbUtaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUubKsbKsbKsbKsbKsbKsbKsbUvbKvbKubKubKubKubUwbKvbJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbKLbKLbKLbKLbKLbUxbUybKLaaaaaaaaaaaabKNbUzbUAbUBbUCbKNbUDbKNbUEbUFbUGbUHbUHbUIbUJbUKbULbUMbUHbUHbUHbUHbUHbUNbUHbUHbUHbUHbUHbUHbUHbYwbUHbUHbnZbnZbnZbnZbnZbnZbnZbnZbUPbwibwibUQbFMbMzbURbUSbUTbUUbUVbMzbUWbUXbUYbUZbpEbVabVbbVcbVdbVebVfbVgbVhbVibVjbVkbVlbVmbVnbVobVnbVnbVpbVqbLxbVrbVsbVtbVubVvbVwbUobVxbVybVzbUobVAbVBbESbESbESbCWaeHaaabNbbNbbNbbNbbNbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabJhbOHbOHbOHbOHbOHbOHbVCbKubOGbOHbVDbKubKubKubKubJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabVEbVFbQAbKLbKLbKLbKLbKLbKNbKNbKNbKNbKNbKNbKNbKNbVGbVHbVIbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbVUbVVbVWbVXcaKbZzcaNcaMccNccLbXkbWfaeHaaaaaaaaaaaaaaaaaabnZbUPbwibWgbWhbFMbWibWjbMzbWkbMzbMzbMzbMzbMzbMzbMzbpEbWlbLqbWmbWmbWnbWobWpbTZbTZbTZbWqbWrbpTbpTbpTbWsbWtbWubBtbOobWvbWwbWvbWxbWybWzbUkbWAbWAbWBbUobWCbWDbWEbWFbWGbCWaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJhbKubKubKubKubKubKubRLbKubVDbKubKubKubKubKubJhbJhaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWHaaaaeHbWIbWJbWJbWKbWLbWMbWNbWNbWObWPbWQbWRbWSbWTbWUbWVbWUbWWbWRbTubTvbWXbWYbWZbXabXbbXcbXbbXdbVQbXebVSbVTbXfbXgbXhbXicckceFbXkbXkbXkbXkbXkbXobXpbXqbXqbXqbXqbXqaaabnZbUPbwibXrbXsbFMbXtbXubXvbXwbXxbXybXtbXzbXAbXBbXCbpEbmsbLqbXDbXEbXFbXGbXHbXIbXJbLqbLqbvabvabvabvabvabXKbXLbXMbLxbLxbLxbLxbRybLxbXNbXObXPbXPbXPbXObXQbXRbXSbXSbXTbCWaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaaaaabJhbJhbQobKubKubKubKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXUbXVbXWbXXbXXbXYbXZbXZbXZbXZbXZbXZbXZbXZbYabYbbWRbYcbWSbWSbWUbYdbWWbWRbYebYfbYgbYhbYibYjbYkbYlbYmbYnbVQbXkbYobYpbYqbYrbYsbYtcfwbZBcfScfCcgQcgPbYxbYybYzbYAbYBbYCbYDbXqaaabnZbUPbwibYEbYFbFMbYGchrbYHbYIbYJbYKbXtbYLbYMbYNbXCbpEbmsbLqbLqbLqbLqbLqbLqbLqbLqbLqbYObYPbpEbYQbYRbvabvabYSbvabvabYTbYUbLxbYVbLxbYWbLxaeHaeHaeHbLxbWCbYXbESbCWbCWbCWbCWaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHbJgbJhbTgbTebTebKubKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaeHaeHbYYbYZbYZbZabZbbZcbZdbZebZfbZgbZhbZibXZbZjbYbbWRbZkbWSbWTbWSbWUbZlbWRbZmbTvbWXbWYbZnbXkbXkbZobZpbZqbZrbZsbZtbZubZvbZwbZxbZyciUchYchYchYciWcaKbZCbXobXpbZDbZEbYDbZFbXqaeHbnZbUPbwibZGbZHbFMbZIbZJbYHbZKbZLbZMbXtbZNbZObZPbXCbZQbZRbZSbZSbZSbZSbZSbZSbZSbZSbZSbZSbZSbZSbZTbZSbZUbZVbZWbZXbZYbESbZZbLxbLxbLxbYWbLxbLxbLxbLxbLxcaacabcaccaccadcaebCWbCWbCWbCWaeHaaaaaaaaacafcafcafaeHaaaaaaaeHaaaaaaaeHaaaaaabNcbJhbLAbJhbJhbKubKubKubKubKubKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHcagcahcaicajcakcalcamcancaocapcapcaqbXZcarcascatcaucavcawbWSbWScaxbWRbZmbTvbWXbUHbUHcaycazcaAcaBcaCcaDbZscaEcaFcaGbXkcaHbXibXkbXkcgQcoqckfckecaOcaPcaQcaRcaSbYDbYDbXqaeHbnZbUPbwibwicaTbFMbZIcaUbZJcaVcaWbYKbXtcaXcaYcaZbXCcbabmscbbcbcbpEcbdcbdcbebpEcbfcbgbnZbnZcbhcbibnZbnZcbjcbkcblcbmcbncbobKpbKpbKpcbpbKpbKpbKpbKpcbqcbrbESbESbEScbscbtcbucbvcbwcbxcbycbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbzcbAcbBcbBcbCbJhbJhbKubKucbDbKubKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHcagcbEcbFcbGcbHcbIcbJcbKcbLcbMcbMcbNbXZcbOcbPbWRcbQbWScbRbWScbScbTcbUcbVcbWcbXcbYcbZccabVQccbcccccdbVQccecaEccfccgbXkcchbXibXkbXkclkckgcmaclnbXkbXobXpbXqbXqbXqbXqbXqaeHcclbUPccmbwiccnbEkccobYHbYHccpccqccrbXtccscctccubXCbpEbmsbnZbnZccvbnZbnZcbhccwccxbnZbnZaaaaaaaaaaaaccycczccAccBccCccCccDccEccEccFccCccCccGccHccHccIccCccJccKbESccMcmbbCWbCWbCWbCWaeHaaaaaaaaacafcafcafaeHaaaaaaaeHaaaaaaaeHaeHaeHccOccPccQbLBbJgbJhbJhbKubKvbKubJhbJhaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHcagccRccSccTccUccVcaoccWcaoccXcaoccYccZcdacdbbWRcdcbWScbRbWSbWScddbWRcdecdfbWXcdgcdhbXkcdicdjcdkcdlcdmcdncdocdpcdqbXkcchbXicdscaJcfBcciccjcducdvbYybYzbYAcdwcdxcdxbXqaeHcdybUPcdzbwicdAbCrbXtcdBcdCbYIcdDcdEbXtcdFcdGcdHbXCbpEbmsbnZcdIbpEcdJbnZaaaaeHaaaaaaaeHaaaaaaaaaaaacdKcdLcdMcdLccCcdNcdOcdPcdQcdRcdScdTcdUcmccdVcdWccCcdXcdXcdXcdYcdZcdXaaaaaaaaaaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHceabJebJebJfbJgbJgbJhbJhbJhbJhbJiaeHaeHaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHbYYbYZcebceccedceecefcegcehceicejcekbXZcelcembWRcenbWSceocepceqcerbWRcesbTvbWXcetceucevcewcexcexceycezceAceAceBceCcexceDceEciVcfAcmdcfSbZAcckceHbXobXpbZDceIceJceKbXqaeHcdybUPceLbwibARbASbXtbXtbXtceMbXtbXtbXtceNceOcePbXCbwibmsbnZceQceRceSbnZaaaaeHaaaaaaaeHaaaaaaaaaaaaceTceUceVceWceXceYceZcfacfbcfccfdcfecffcdVcdVcfgccCaaacdXcfhcficfjcdXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaaaaaaaaaaaaaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacafcafcafcafagvcalcalcalcakcalbXZbXZbXZbXZbXZbXZbXZcelcbPbWRbWRbWRbWRbWRbWRbWRbWRcfkbYfbWXcflcfmcfncfocfpcfqcfrcfscftcfucfvcmfcfxcfycfzcdrbXkcaIcdtbYvcnkcfDcfEcaQcaRcfFcdxcdxbXqaeHcdycfGcfHbwicfIcfJcfKcfLbCgcfMcfNcfOcfPcfQcfPcfPcfRcnlbmsbnZbnZbnZbnZbnZaaaaeHaaaaaaaeHaaaaaaaaaaaacfTcfUcfVcfWcfXcfYcfZcgacgbcgccgdcgecgfcggcghcgiccCaaacdXcgjcgkcglcdXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgmcgncgncgocgpbKLcgqcgrcgscgtcgsbWNcgubWNbWNcgscgvcgscgwcgxcgycgzcgAcgBcgAcgAcgCbKLcgDcgEcgFcgGcgHcgIbUHbUHcgJbUHbUHcgKbUHcgLcgMcgNcgObUHcnmbXkclmcdtbZAcckcgRbUHbXpbXqbXqbXqbXqbXqaeHcgScgTcgUcgVcgWcgXcgYcgZchachbchcchdchdchechdchfchgbwichhchibnZaeHaeHaeHaeHchjaeHaeHaeHaeHaeHaeHaeHchkccychlccychmchnchochpchqcnnchschtcffcdVcghchuccCaaacdXchvchwchxcdXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachychzchAchBbNkchCchDchEbNkchFbNkchGchHchHchHchIchJchJchKchLchMchNchLchLchObNkchPbKLbZmbTvbWXchQchRchSchTchTchSchTchUchVchRchWbXgcnocllcolcaIcfAcmdcfCbZAcduchZciabYzbYAcibciccidbXqaeHbnZbUPcieciecifcigcifcihciicijcikcilcilcilcilcilcimcincinbmsbnZaeHaaaaaaaaaaeHaaaaaaaeHaaaaaaaaaaaaccyciocipciqccCcircirchpchqciscitciucffcdVcdVcivccCaaaciwcixciycizciAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciBcgncgncgochFbKLbNkchEciCciCciCciCciCciDciDciEciFciGciHciIciJciKciLchLciMbNkchPbKLciNciObWXciPciPciQciPciRciSciPciQciPbUHciTcombXkcljconcoobXkcaIcdtbZAcckciXbXobXpbZDciYciZcjabXqaeHbnZbUPciecjbcjccjdcjecifcjfcjgcjhcjicjjcjkcjlcilcjmcjncinbmsbnZaeHaaaaaaaaaccyccyccyccyccyccyccyccyccycjocjpcjqccCcjrcjscjtcjucjvcjwcjxcffcjycjzcjAccCaaaaeHcjBcjCcjBaeHaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacafcafcafcafagvchHcjDciCcjEcjFcjGcjHcjIciDcjJcjKcjLcjMcjNcjOcjPcjQchLchLchLcjRbKLcjScjTcjUciPcjVcjWcjXcjYcjZckackbckcbUHckdcopbXkchXbXkbXkbXkclmcdtbYvcpmckhcaPcaQcaRckiciccicbXqaeHbnZbUPcieckjckkcklckmcihcknckockpckqckrckscktcilckuckvcinbmsbnZaeHaaaaaaaaaccyckwckxckyckzckAckBckCckDckEckFckGccyccCccCccCccCccCccCccCccCccCccCccCccCaaaaeHckHckIckHaeHaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafagAagAaafagAagAagAahnagAagAagAaafaafaaaaaaaeHaeHaaaaaaaaaaaaaaaaaaaeHckJckKckLckMckNckOckPckQckRckScjKcjLcjMcjNcjOckTckUckVckWchLckXckYckZclaclbciPclccldcldcleclfcldcldclgclhclibXgbXkchXbXkbXkbXkbXkbXkbZAcckbXkbXoclobXqbXqbXqbXqbXqaeHbnZbUPcieclpclqclrclscifcltcijclucilcilcilcilcilclvclwcinbmsbnZaeHaeHaeHaeHccyclxclyclxclzclAclBclCckDckDclDckDccyccyaaaaaaaaaaaaaeHaeHaaaaaaaaaaaaaaaaaaaeHaaaclEaaaaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaeHaeHaaaaeHaeHaaaaaaaeHaeHaeHaaaaafaaaaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaclFckKclGclHclIclIclJclKclLckSclMcjLclNclOcjOckTcjKclPcjKclQclRclSclTclUbWXclVclWclXcpoclYclZclXclXcppbUHcptbVObXkcljcllbXkbXkbXkbXkbZAcmecpZbYybYzbYAcmgcmhcmhbXqaeHbnZbUPciecmicmjcmkcmlcihcmmcmncjhcmocmpcmqcmrcmscmtcmucinbmsbnZaeHaaaaaaaaaccyclxclxclxcmvcmwcmxcmycmzcmAcmBcmCcmDccyaaaaaaaaaaaaaaaaeHaeHaaaaaaaaaaaaaaaaeHaaacmEaaaaeHaeHaaaaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacmFcmGcmHaaacmFcmGcmHaaacmFcmGcmHaeHcmIaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaclFcmJcmKcmLclIclIcmMcmNcmOcmPcmQcmRcmScmTcmUcmVcmWcmXcmWcmYcmZcnacnbcnccndcnecnfcngcngcnhcnicngcngcnjcqecqbbXkbXkchXcnpbXkbXkbXkbXkbZAceGcnqbXobXpbZDcnrcnscntbXqaeHbnZbUPciecnucnvcnwcnxcifcnyckockpcnzcnAcnBcnCcmscnDcnEcinbmsbnZaeHaaaaaaaaaccyckDckDckDckDcnFceUcnGcnHcnHcnIceUcnJccyaaaaaaaaaaaaaaaaaaaaeaaeaaecnKaeHaeHaeHaeHcmEaeHaeHaeHaeHaeHahnaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacmFcnLcmHaaacmFcnLcmHaaacmFcnLcmHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaeHaeHaeHclFckKcnMcnNcnOcnPcnQcnRcnScnTcnUcnVcnWcnXcnYcnYcjKcnZcoacobcoccetcodcoecofcogcohcoicoicojcokcoicoicoicrjcqgcrqcrmcsqbYvcaLcaLcaLcoqcorcoscotcaPcaQcaRcoucmhcmhbXqaeHbnZbUPciecovcowcoxcoycihcozcoAcoBcmscmscmscmscmscoCcoDcinbmsbnZaeHaaaaaaaaaccyckwckxckycoEcoFcnHcoGceUceUcoHceUcoIccyaaaaaaaaaaaaaaaaaaaaeaaaaeHaaaaeHaaaaaaaaacoJaaaaeHaeHaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaagAaeHcmFcnLcmHaaacmFcnLcmHaeHcmFcnLcmHaeHaaaaaaaeHaeHaaaaaaaaaaaaaaaaeHaaaaaacoKcoLciCcoMcjFcoNcoOcoPciDcoQcoRcoScoTcoUcoVcoWcjKcjKcoXcoYcoZcpacpbcpccpdciPcpecpfcpgcphcpicpjcpkcplbUHcsrbXkcpncljcstceAcllcpqcprcpscmecpubXobXpbXqbXqbXqbXqbXqaeHbnZbUPcieciecpvciecieciebwicpwbwibwicpxbwqcpycincincincinbmsbnZaeHaeHaeHaeHccyclxclxclxcpzclAceUcpAcpBcpCcpDceUcpEccyccyccyccyaaaaaaaaaaaeaaacpFcpFcpFcpFcpFaeHcpGaeHcpFcpFcpFcpFcpFaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaaacmFcnLcmHaeHcmFcnLcmHaaacmFcnLcmHaaaaaaaaaaaaaaaaeHaaaaeHaaaaeHaeHaaaaaabKLckKciCciDcpHcpIcpIcpJciDcpKcpLclPcpMcpNcpOcpPcjKcpQcpRcpScpTcetcodcetcpUciPciPcpVciPciPciPcpWcpXcpYbUHbXkcqdcqachXcqccqdcxlcqfczscllcqhcqibYycqjaeHaeHaeHaeHaeHaeHbnZcqkcqlcqmcqncqmcqocqpcqqcqrcqscqtbZSbZSbZSbZSbZSbZSbZScqubnZaaaaaaaaaaaaccyclxclxclxcoEcqvcnHcqwcqxcqycqzceUceUcqAcqBcqCccyaeHaeHaeHaaeaeHcqDcqEcqEcqEcqEcqFcpGcqGcqHcqHcqHcqHcqIaeHaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafagAaeHaaacmFcnLcmHaeHcmFcnLcmHaaacmFcnLcmHaeHaaaaaaaaaaaaaeHaeHcqJcqKcqKcqKcqKbKLbKLcqLchLcqMcqNcqOcqPcqPcqPcqQcqRcqScqTcqUcqVcpPclMcjKcqWchLcqXcqYcqZcracrbcrccrdcrecrfcrgcrccrhcribtJbUHcaycrkcrlchXcrncrocrpdDAcrrcrscrtcrucaDaeHaeHaaaaaaaaaaaaaeHbnZcrvcrwcrxcrycrzcrAbnZcrBcrCcrBbnZbnZbnZbnZbnZbnZbnZbnZbnZbnZaaaaaaaaaaaaccyckDckDckDckDcrDceUcpAcrEcrFcrGceUceUcrHceUcrIccyaaaaaaaaaaaeaeHcrJcrJcrJcrJcrJaaacpGaaacrJcrJcrJcrJcrJaeHaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaeHaaaaeHaeHcrKaeHaeHaeHcrKaeHaaaaeHcrKaeHaaaaaaaaaaaaaaacrLcrMcrNcrOcrPcrQcrRcrScrTcrUchLcrVcrWcrXcrYcrZcsacsbcsccsdcpMcsecsfcpPcjKcjKcsgchLchLchLcshcsicsjcrccskcslcsmcsncrccsocricspbUHdUkdUKcssdULcsucsvcsscswcsucsvcsscsxbUHaeHaeHaaaaaaaaaaaaaaacsybpEbpEcszcsAcsBcsCcsDcsEcsFcsGcsDaeHaeHaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaccyckwckxckycsHcoFcnHcoGceUceUcsIceUcsJcsKcsLcsMccyaaaaaaaaaaaeaaaaeHaaaaeHaeHaeHaaacpGaaaaeHaaaaeHaaaaeHaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagAaeHcsNcsOcsOcsPcsQcsQcsQcsQcsQcsQcsQcsQcsQcsQcsQcsQcsQcsQcsRcsScsTcsUcsVcsWcsXcsYcsZbNkckKchLchLchLchLchLchLctachLctbctccjKcjKcnYcjKcjKcjKcjKctdctectfctgcthcnWcrcctictjctkctlcrccrhcribtJaaabXpctmbXpctmbXpctnbXpctobXpctnbXpctocloaaaaaaaaaaaaaaaaaaaaactpbpEbpEctqctrctscttcsDctuctvctwctxaeHaeHaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaccyclxclyclxctyclAceUctzceUctAcoHceUctBckDckDckDccyaaaaaaaaaaaeaaacpFcpFcpFcpFcpFaeHcpGaeHcpFcpFcpFcpFcpFaeHaaeaaaaaaaaaaaaaaaaaaaaaaaactCaaaaaaaaactCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaeHaaaaeHaeHctDaeHaaaaeHctDaeHaaaaeHctDaeHaaaaaaaaaaaaaaacrLcrMctEctFctGctHcqKctIbNkctJctKctLctMctNctOctPctQchLctRctSctTctUctVctWctWctXctYctZcmPcuacubcuccmWcudcuecufcugcuhcrccrhcribtJaaabXqcuibZDcujbXqcukbZDculbXqcukbZDculbXqaaaaaaaaaaaaaaaaaaaaabnZcumcuncuncuncuncuocsDcupcuqcurcusaeHaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaccyclxclxclxcsHcutcuucuvcuwcuwcuxcuwcuycuwcuzcuAcdKaeHaeHaeHaaeaeHcqDcqEcqEcqEcqEcqFcpGcqGcqHcqHcqHcqHcqIaeHaaeaaaaaaaaaaaaaaaaaaaaaaaactCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafagAaeHaeHcmFcuBcmHaaacmFcuBcmHaaacmFcuBcmHaeHaaaaaaaaaaaaaeHaeHcuCcqKcqKcqKcqKbKLchOcuDcuEcuFcuGcuHcuIbKLbKLcuJcuKcuLcuMcuNcuOcuNcuNcuPcuQcuQcuRcuScuQcuTchLcuUcuVcuVcuVcuVcuVcsocricspaeHbXqcuWcuXcuYbXqcuZcvacvbbXqcvccvdcvebXqaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaeHaeHaeHcsDcurcvfcvgcvhaeHaaaaaaaeHaaaaaaaaaaaaaaaaaaaaaaaaaaachkccycvicvjcvjcvkcvlcvmcvncvocvpcvocvqcvrcvscvtcvuaaaaaaaaaaaeaeHcrJcrJcrJcrJcrJaaacpGaeHcrJcrJcrJcrJcrJaaaaaeaaactCaaaaaactCaaaaaactCctCctCctCctCctCctCaaaaaactCaaaaaactCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmFcuBcmHaeHcmFcuBcmHaaacmFcuBcmHaaaaaaaaaaeHaaaaeHaeHaeHaaacvvcvwcvxbKLbQwbQxcvycvzcvAcvBcvCcvDcvEcuJcuJcvFcvGcvHcvIcvJcvKcvLcvMcvNcvOcvPcvQcvRcvScvTcvUcvVcvWcvXcvYcrhcribtJaaabXqcvZcwacwbbXqcwccwdcwcbXqcwecwfcwebXqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwgcsDcwhcsDcwgaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwiaaaccycwjcwkcwlcwmcwncwkcwocwpcwncwkcwqccyaaaaaaaaacnKaaaaeHaaaaeHaaaaeHaaacwraaaaeHaaaaeHaeHaeHaeHaaeaaactCctCctCctCaaactCctCctCctCctCctCctCctCctCaaactCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHuaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagAaeHcmFcuBcmHaaacmFcuBcmHaaacmFcuBcmHaeHaaaaaaaaaaaaaeHaeHaaaaaacwsbNkbNkcwtbNkbNkbNkbNkcwucwvcwwcwxcwycuJcuJcwzcwAcwBcwBcwCcwCcwDcuQcwEcwFcwGcwHcwIcwJcwKcwLcwMcwNcwOcwPcrhcribtJaaabXqcwbcwQcwbbXqcwccwRcwcbXqcwecwScwebXqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHaeHaaacsDcwTcwUcwVcsDcsDcsDcsDcsDcsDcsDaaaaaaaaaaaaaaaaaaaaaaaaaaacwWaeHccycwXcwYcwZckDcxacxbcxcckDcxdcxecxfccyaaaaaaaaaaaeaaacpFcpFcpFcpFcpFaeHcmEaeHcpFcpFcpFcpFcpFaeHaaeaaactCctCctCctCaaactCctCctCctCctCctCctCctCctCaaactCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagAaeHcmFcuBcmHaaacmFcuBcmHaeHcmFcuBcmHaeHaeHaeHaaaaeHaeHaaaaeHaaacxgcxhcxibKLbQwbQxbQxcxjchHchHchHchHchHcxkcuJcxlcxmcxncxocxpcxqcxrcxscxtcxucxvcxwcxxcxycwLcwLcxzcxAcxBcwPcsocricspaeHbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqaaaaaaaaaaaaaaacsDcsDcsDcsDcsDcsDcsDcsDcsDcsDcxCcxDcxEcxFcxGcxHcxIcxJcxKcsDaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaccycxLclxclxckDcxLclxclxckDcxLclxclxccyaeHaeHaeHaaeaeHcqDcqEcqEcqEcqEcxMcxNcxMcqHcqHcqHcqHcqIaeHaaeaaactCctCctCctCaaactCctCctCctCctCctCctCctCctCaaactCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagAaeHcmFcuBcmHaaacmFcuBcmHaeHcmFcuBcmHaeHaeHaeHaaaaeHaeHaaaaeHaaacxgcxhcxibKLbQwbQxbQxcxjchHchHchHchHchHcxkcuJdUMcxmcxncxocxpcxqcxrcxscxtcxucxvcxwcxxcxycwLcwLcxzcxAcxBcwPcsocricspaeHbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqbXqaaaaaaaaaaaaaaacsDcsDcsDcsDcsDcsDcsDcsDcsDcsDcxCcxDcxEcxFcxGcxHcxIcxJcxKcsDaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaccycxLclxclxckDcxLclxclxckDcxLclxclxccyaeHaeHaeHaaeaeHcqDcqEcqEcqEcqEcxMcxNcxMcqHcqHcqHcqHcqIaeHaaeaaactCctCctCctCaaactCctCctCctCctCctCctCctCctCaaactCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahnaeHcmFcxOcmHaaacmFcxOcmHaaacmFcxOcmHaeHagAaeHaeHaeHaaaaaaaaaaeHbKLcxPcxQbKLaeHaeHaaaaaaaaaaaaaaaaaaaaaaaacuJcxRcxScxTcxUcxVcxWcxXcuQcxYcxZcyacybcyccydcyecyfcygcyhcyicyjcrhcribtJaaaaaaaaaaaaaeHaeHaeHaaaaaaaeHaaaaaaaaaaeHaaaaaaaaaaaacsDcsDcykcylcymcyncyocypcsDcxFcxFcyqcyrcyscxFcytcurcurcyucyvcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccycywclxclxckDcywclxclxckDcywclxclxccyaaaaaaaaaaaeaeHcrJcrJcrJcrJcrJaaacmEaaacrJcrJcrJcrJcrJaaaaaeaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagAaaaaeHaaaaaaaaaaeHaeHaeHaaaaaaaeHaeHaaaagAaeHaeHaaaaaaaaaaaaaaaaeHaaaaaaaeHaaaaeHaaaaaaaaaaaaaaaaaaaaaaaacuJcyxcyycyzcyAcyBcyCcyDcvMcyEcyFcyGcyHcyIcyJcyKcyLcyLcyMcyLcyLcyNcyOcyPcyLcyLcyLcyLcyQcyRaeHaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaacsDcyScurcurcyTcurcyTcyUcsDcyVcyWcxFcyXcxFcxFcyYcurcurcyZczacsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccyczbclxclxckDczbclxclxckDczbclxclxccyaahaaaaaaaaeaaaaaaaeHaeHaeHaaaaaacmEaeHaaaaaaaeHaeHaaaaaaaaeaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafagAaafaafahnagAagAagAagAaafagAagAaafczcaeHaaaaaaaaaaaaaaaaaaaeHaaaaeHaaaaaaaaaaaaaaacxkcxkcxkcxkcxkcxkcxkczdczeczfczgczhczhczicuQcuTczjczkczlczmczncuVcyLczoczpczqczrczscztcztczuczvczwczxczyczzaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaczAczBczCczDczEczFczGczHczIczJczKczLczMczNczOczPczQczRczSczTczUcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachkccyccyccyccyccyccyccyccyczVczVczVchkaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaacmEaaaaaaaaaaaeaaeaaecnKaaeaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafagAaafaafahnagAagAagAagAaafagAagAaafczcaeHaaaaaaaaaaaaaaaaaaaeHaaaaeHaaaaaaaaaaaaaaacxkcxkcxkcxkcxkcxkcxkczdczeczfczgczhczhczicuQcuTczjczkczlczmczncuVcyLczoczpczqczrdUNcztcztczuczvczwczxczyczzaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaczAczBczCczDczEczFczGczHczIczJczKczLczMczNczOczPczQczRczSczTczUcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachkccyccyccyccyccyccyccyccyczVczVczVchkaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaacmEaaaaaaaaaaaeaaeaaecnKaaeaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxkczWczXczYczZcAacAbcAccAdcAecAfcAfcAfcAfcAgcAhcAicAjcAkcAfcAlcAfcAmcAncAocApcztcztcztcztcAqcyLcyLcyLcyLcAraeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsDcyScurcAscAtcAucAscAvcAwcAxcAycurcAzcurcurcAAcAycurcAycABcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacACcACcACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeHcADaeHaaeaaaaaaaaaaaaaaaaaaaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAEaaaaaaaaacAEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxkcAFcAGcAHcAIcAJcAKcALcAMcANcAOcAPcAQcARcAScATcAUcAVcAWcAXcAYcAUcAZcBacBbcBccBdcBecBecztcBfcBgcyLaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaacsDcyScBhcAAcurcAzcAAcBicsDcBjcAycBkcAucBlcBmcBncBocBpcBqcBrcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaeHaaaaaeaaaaaaaaaaaaaaaaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAEcAEcAEcAEcAEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHcxkcBscBtcAHcAHcBucBvcBwcBxcBwcBycBwcBxcBwcBwcBwcBwcBwcBzcBAcBwcBwcyLcBBcBCcBDcztcBEcztcztcztcBFcyLcBGcBHcBIcBHcBJaeHaaaaaaaaaaaaaaaaaaaaaaaaaaacsDcsDcsDcBKcurcurcAAcBLcsDcBMcAycBNcBOcBPcBQcAAcBRcBQcBRcAAcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaactCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCctCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -12652,7 +12657,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeagvagvagvagvagvagvagvagvagvagvagvdCQdDpdDqdDrdCQagvagvagvagvagvagvagvagvagvagvagvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaedCQdCQdDsdDtdDudCQdCQaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaqqaqqaaeaaedCQdCQdDvdDwdDxdDjdDydCQdCQaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqqaqqaqqdCQdCQdDzdDAdDBdDbdDbdDbdDbdDCdCQaaeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqqaqqaqqdCQdCQdDzdUOdDBdDbdDbdDbdDbdDCdCQaaeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqqaqqdDDdDEdDFdDGdDHdDbdDbdDIdDbdDbdDJdCQaaeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqqaqqdDKdDodCQdCQdDLdDMdDbdDbdDbdDbdDCdCQaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaqqaqqaaeaaedCQdCQdDNdDOdDOdDOdDPdCQdCQaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -13081,13 +13086,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSsdStdSsaaaaaaaaaaaaaaadQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydRKdQydQydQydRKdRKdQydRKdRKdRKdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydRKaaaaaaaaaaaaaaaaaaaaaaaadRrdQydQydQydQydRsdSudSvdSwdSxdSydSzdSAdSBdSCdSDdSEdSFdSGdRmdSHdSIdSJdSKdSLdRWdSMdSNdSmdSOdSPdSQdSRdSqdSraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSSdSTdSSaeHaaaaaaaaadQydQydQydQydQydQydQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdQydQydQydQydQydQydQydRKdRKdRKdRKdRKdQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaaaaaaaadRrdQydQydQydQydRsdSUdSVdSWdRsdSXdSYdSZdTadTbdTcdTddSFdTedRmdTfdTgdThdTidTjdRWdTkdTldSmdTmdTndTodTpdTqdSraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadTrdTsdTtdTuaeHaaaaaadQydQydQydQydQydQydQydRKdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaaaaadQAdTvaaadQydQydQydRsdSUdTwdTxdRsdTydSZdSYdTzdTAdTBdTCdTBdTDdTBdTBdTBdTBdTEdTjdRWdTFdTGdTHdTHdTIdTJdTKdSqdSraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadTLdTMdTMdTNdTOdTPdSSaeHaaaaaadQydQydQydQydRKdRKdRKdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaeHdTQdTRdQYdQYdQYdTSdTTaaadQydQydQydRsdSUdTUdTVdRsdTWdTXdTYdTZdUadUbdUcdUddUedUfdUgdUhdTBdUidUjdRWdUkdTmdUldUmdUndUodRWdUpdUqaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUrdUsdUtdUudUvdUwdUxaeHaeHdRKdRKdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdUydUydUyaeHdUzdTTaeHaeHaeHaeHaeHaaadRsdRsdRsdRsdRsdRsdUAdRsdSddSddSddUBdUCdTBdUDdUEdUFdUGdUHdUIdTBdUJdUKdULdUMdUNdUOdUPdUQdURdRWdUSdQbaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUTdTMdTMdUUdUVdTPdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdUydUydUyaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdRmdUYdUZdVadVbdVcdVddVedVfdVgdVhdVidVjdTBdVkdVldVmdVndVodVpdTBdVqdVrdVsdVsdVsdVtdVudVvdVwdRWdUSdVxdVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdVzdVAdVBdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdUyaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdVCdVDdVEdVFdVGdVEdVHdVEdVEdVEdVIdVJdVKdVLdVMdVNdVOdVPdVQdVRdVSdVTdVUdVsdVVdVWdVXdVYdVZdWadWbdWcdVxdVxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdWddWedWfdWgdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdWhdWidWjdWkdWldWmdWndWodWpdWqdRjdWrdWsdTBdWtdWudWvdWwdWxdWydTBdWzdWAdWBdWCdWCdWDdWEdWFdWGdWHdWIdWJdWKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdWLdWMdWNdUWdWOdWPdUWdUWdUWdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdWQdWidWjdWkdWldWRdWSdWodWTdWUdRjdWVdWWdTBdWXdTBdTBdTBdTBdWYdTBdWZdXadVsdXbdXcdXddXedXfdXgdXhdQcdXidXjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHdXkdXldXmdXndXodXpdSsdUwdXqdUWdXrdXsdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdRmdWidWjdWkdXtdXudXvdWodXwdXxdRjdXydXzdXAdXBdXCdXDdXEdRjdXFdXGdXHdXIdVsdXJdXKdXLdXMdXLdXNdXhdWKdWKdWKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadTLdTMdTMdTNdTOdTPdSSaeHaaaaaadQydQydQydQydRKdRKdRKdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaeHdTQdTRdQYdQYdQYdTSdTTaaadQydQydQydRsdSUdTUdTVdRsdTWdTXdTYdTZdUadUbdUcdUddUedUfdUgdUhdTBdUidUjdRWdTkdTmdUldUmdUndUodRWdUpdUqaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUrdUsdUtdUudUvdUwdUxaeHaeHdRKdRKdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdUydUydUyaeHdUzdTTaeHaeHaeHaeHaeHaaadRsdRsdRsdRsdRsdRsdUAdRsdSddSddSddUBdUCdTBdUDdUEdUFdUGdUHdUIdTBdUJdVrdVUdVtdWAdVXdUPdUQdURdRWdUSdQbaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadUTdTMdTMdUUdUVdTPdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdUydUydUyaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdRmdUYdUZdVadVbdVcdVddVedVfdVgdVhdVidVjdTBdVkdVldVmdVndVodVpdTBdVqdXadVsdVsdVsdXIdVudVvdVwdRWdUSdVxdVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdVzdVAdVBdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdUyaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdVCdVDdVEdVFdVGdVEdVHdVEdVEdVEdVIdVJdVKdVLdVMdVNdVOdVPdVQdVRdVSdVTeqDdVsdVVdVWeqYdVYdVZdWadWbdWcdVxdVxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaadQzdQzdQzdQzdQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdWddWedWfdWgdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdWhdWidWjdWkdWldWmdWndWodWpdWqdRjdWrdWsdTBdWtdWudWvdWwdWxdWydTBdWzeqZdWBdWCdWCdWDdWEdWFdWGdWHdWIdWJdWKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdWLdWMdWNdUWdWOdWPdUWdUWdUWdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdWQdWidWjdWkdWldWRdWSdWodWTdWUdRjdWVdWWdTBdWXdTBdTBdTBdTBdWYdTBdWZerndVsdXbdXcdXddXedXfdXgdXhdQcdXidXjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHdXkdXldXmdXndXodXpdSsdUwdXqdUWdXrdXsdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaadRrdUXdUXdUXdUXdUXdUXdUXdRmdWidWjdWkdXtdXudXvdWodXwdXxdRjdXydXzdXAdXBdXCdXDdXEdRjdXFdXGdXHerodVsdXJdXKdXLdXMdXLdXNdXhdWKdWKdWKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHdXOdXPdXldXQdXRdXSdXTdXUdXqdXVdXsdXWdXrdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaadXXdXYdXZdYadYbdYcdXZdYddYedYfdYgdYhdYhdYhdRjdRjdRjdRjdRjdYidYjdYkdYldYmdYndYodRjdYpdYqdYrdYsdVsdYtdXKdYudYvdYwdYxdYydYzdYAdYBdTRdQYdQYdQYdQYdQYdQYdQZdYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadYDdXOdYEdXOdXmdXmdWOdYFdXRdUWdWgdYGdUWdXsdYHdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaadYIdYJdYKdYLdYKdYKdYKdYMdYKdYNdYKdYOdYPdYQdYRdYSdYTdYSdYRdYUdWidYVdYWdYXdYYdYZdRjdZadZbdZcdZddVsdVsdZedVsdVsdVsdVsdZfdZgdZhdZidZjdZkdZldZmdZndZndZndZodRqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeHaeHdZpdZqdXmdZrdZsdXmdVBdZtdXSdZudZvdZwdUWdUWdUWdUWdUWdUWdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydQydQydQydQydQydQydQydQydQydQydQyaaaaaaaaaaaaaaadZxdZydZzdZAdZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdYRdZKdZLdZLdZMdYidZNdZOdZPdZQdZQdZRdZSdZQdZQdZTdZUdZVdZWdZXdZYdZOdZZeaadZQdZZeabeaceadeaeeafeageaheaieajdZndRJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -13205,9 +13210,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehsehseh aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehseiaeiaeiaeiaeiaeiaehsehsehsehsehsehsehsehsehsehseiaeiaeiaeiaeiaehsehsehsehsehsehsehsehsehsecaecaecaecaecaecaecaecaepVepVepVecaecaecaebrdQydQyegpecaenTecadRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydQydQydQydQydQydQydQydQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKepRdRKdRKepEepMepNepWepKepXecaecaecaecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQydQydQydQydQydQydQyedHedHedHedHedHecaecaeoUecaecaecaecaecaecaecaecaegpebrebrdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehseiaeiaeiaeiaeiaeiaeiaeiaehsehsehsehsehsehsehseiaeiaeiaeiaeiaeiaehsehsehsehsehsehsehsehsehsecaecaecaecaecaecaecaecaepYepZeqaecaecaecaebrdQydQydQyecaenTecadRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydQyebrebrebrebrebrebrebrdQydQydQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKepEeqbepEepEepEepEepEepEepKeqcecaecaecaecaecaecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaadQydQydQydQydQyebredHeqdeqeeqfeqgecaeijeoYehOecaecaecaecaecaecaecaegpegpebrdQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehseiaeiaeiaeiaeiaeiaehsehsehsehsehsehsehseiaeiaeiaeiaeiaeiaehsehsehsehsecaecaeqheqheqheqheqheqheqieqjeqkeqheqheqheqheqhecaecaecaebrdQydQydQyecaenTecadRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydQydQyebrebrecaecaecaecaecaebrebrebrebrebrdQydQydQydQydQydQydQydRKdRKdRKdRKepEepEepEepEeqleqmeqnepEepIeqoepEepQepEepEepEeqpeqqeqrepEecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaadQydQydQyebrebredHeqseqteqfeqgecaehJeoZehLecaecaecaecaecaecaecaecaecaebrebrdQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydRKdRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehseiaeiaeiaeiaeiaeiaehsehsehsehsehsehsehseiaeiaeiaeiaeiaehsehsebrecaecaecaeqhequeqveqweqxeqyeqzeqAeqBeqCeqDeqEeqFeqGehOecaecaebrebrebrebrecaenTecaegpdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydQyebrebrecaecaecaecaecaecaecaecaecaecaebrebrebrebrebrdQydQydQydQydRKdRKdRKepEeqHeqIeqJeqKeqIeqIepEepMepNeqLepKepEeqMeqNeqOeqOeqOepTecaecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaebrebrebrecaecaehJeqPeqPehLecaecaeqQeqReqSeqTeqReqRecaecaecaecaecaecaebrdQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehsehseiaeiaeiaehsehsehsehsehsehsehsehseiaeiaeiaehsehsdQyebrecaecaecaeqheqUeqveqVeqWeqveqveqveqveqXeqYeqZeqFeraerbecaecaecaecaecaebrecaenTecadQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQyebrebredHecaecaecaecaecaecaecaecaecaecaecaecaecaecaecaebrebrdQydQydQydQydQydQyepEerceqIerdercereerfepEepEepEepEepKepEeqMergergergerhepXecaecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaecaecaecaecaecaecaecaecaecaecaecaeqQerierierierjeqRecaerkecaecaecaeepedHebrdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehseiaeiaeiaehsehsehsehsehsehsehsehsehsehsehsehsehsdQyebrecaecaecaeqherleqveqvermeqveqveqveqveqverneroerpeqGehLecaecaecaecaecaecaecaenTecaebrebrdQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQyebrebrecaepUecaecaecaecaecaecaecaecaecaecaecaecaecaecaecaecaebrebrebrebrdQydQydQyepEerqeqIerreqIerseqIerterheruerverwepEeqMergerxergeryeqcecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecaecaecaecaecaerzerzerAerBeqQerCerDerEerFeqReqReqReqRecaecaecaecaebrebrdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehseiaeiaeiaeiaeiaeiaehsehsehsehsehsehsehseiaeiaeiaeiaeiaehsehsebrecaecaecaeqhequeqveqweqxeqyeqzeqAeqBeqCewMeqEeqFeqGehOecaecaebrebrebrebrecaenTecaegpdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydQyebrebrecaecaecaecaecaecaecaecaecaecaebrebrebrebrebrdQydQydQydQydRKdRKdRKepEeqHeqIeqJeqKeqIeqIepEepMepNeqLepKepEeqMeqNeqOeqOeqOepTecaecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaebrebrebrecaecaehJeqPeqPehLecaecaeqQeqReqSeqTeqReqRecaecaecaecaecaecaebrdQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehsehseiaeiaeiaehsehsehsehsehsehsehsehseiaeiaeiaehsehsdQyebrecaecaecaeqheqUeqveqVeqWeqveqveqveqveqXewOewNeqFeraerbecaecaecaecaecaebrecaenTecadQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQyebrebredHecaecaecaecaecaecaecaecaecaecaecaecaecaecaecaebrebrdQydQydQydQydQydQyepEerceqIerdercereerfepEepEepEepEepKepEeqMergergergerhepXecaecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaecaecaecaecaecaecaecaecaecaecaecaeqQerierierierjeqRecaerkecaecaecaeepedHebrdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehseiaeiaeiaehsehsehsehsehsehsehsehsehsehsehsehsehsdQyebrecaecaecaeqherleqveqvermeqveqveqveqveqvewQewPerpeqGehLecaecaecaecaecaecaecaenTecaebrebrdQydQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdQydQyebrebrecaepUecaecaecaecaecaecaecaecaecaecaecaecaecaecaecaecaebrebrebrebrdQydQydQyepEerqeqIerreqIerseqIerterheruerverwepEeqMergerxergeryeqcecaecaecaecaecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecaecaecaecaecaerzerzerAerBeqQerCerDerEerFeqReqReqReqRecaecaecaecaebrebrdQydQydRKdRKdRKdRKdRKdRKdRKdRKdRKdQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehsehsehsehsehsehsehsehsehsehsehsehsehsehsdRKdRKebrebrecaecaeqherGeqverHerIerJerKerKerLeqheqheqheqheqheqheijehOecaecaecaecaecaenTecaecaebrebrebrdQydQydQydQydQydRKdRKdRKdRKdRKdRKdRKdQydQydQyebrecaecaecaecaecaecaecaecaecaecaecaeijehOecaecaecaecaecaecaecaecaecaebrebrdQydQyepEepEepEepEepEepEepEerMerNerOerMerNepEepEepEepEepEerPepEepEerQerRecaecaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecaecaerSerBerTerUerVerWerXerDerYerZesaesbescesdehOecaecaecaedGebrdQydQydRKdRKdRKdRKdRKdRKdRKdQydQydQydRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehsehsehsehsehsehsehsehsehsehsdRKdRKdQyebrecaecaeqheseeqvesfeqWesgeshesieqvesjeskeslesmesnesoeoyeozeiheiheiheiheihespecaecaecaecaebrebrebrdQydQydQydQydQydRKdRKdRKdQydQydQydQyebrebrecaecaejeeiheiheiheiheiheiheiheiheoyeozeiheiheiheiheigecaecaecaecaecaebrdQydQydQydQydQyepEesqesressergeryesterheryertesuesveswerheryergergesxesyeqqeqreszesAesAesAesAesAesAesAesBesBesBesBesBesBesCerAesDesEesFesGesHesIesJesKerDerDesLesMesNesOesPesQecaecaecaedGebrdQydQydRKdRKdRKdRKdRKdRKdQydQydQydRKdRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehsehsehsehsdRKdRKdQyebrecaecaeqheqheqheqheqhesResSesTeqhesUesVesWesWesWesXehJehLecaecaecaecaecaehXecaecaecaecaebrecaebrebrdQydQydQydQydQydQydQydQydQydQyebrebrecaecaecaehXecaecaecaecaecaecaecaecaehJehLecaecaecaecaehXecaecaecaecaecaebrebredHebrebrdQyepEepEepEepEesYeryesZetaetaervetbetcetcetdetdeteetcetfetgetcetgethethethethethethethethetietietietietietietietjetketjetletketmetnetoetpetqetretsettetuetvesdehLecaecaecaecaebrebrdQydQydRKdRKdRKdRKdRKdQydQydQydRKdRKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa From edd58b0ffcc52dd4f3b708c8b1c0ca3d8e8b6414 Mon Sep 17 00:00:00 2001 From: skull132 Date: Mon, 4 Jan 2016 16:18:15 +0200 Subject: [PATCH 26/26] Clean Step_x and _y Removed 3 instances. --- maps/tgstation2.dmm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index f7195fd3..8ebf4af3 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -4052,7 +4052,7 @@ "bzV" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/research/station) "bzW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/quartermaster/storage) "bzX" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2; layer = 2.6},/turf/simulated/floor/plating,/area/quartermaster/storage) -"bzY" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -6; pixel_y = -4; range = 4; req_access_txt = "5"; step_y = 0},/obj/machinery/computer/guestpass{pixel_y = 32},/turf/simulated/floor,/area/medical/reception) +"bzY" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -6; pixel_y = -4; range = 4; req_access_txt = "5"},/obj/machinery/computer/guestpass{pixel_y = 32},/turf/simulated/floor,/area/medical/reception) "bzZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/storage) "bAa" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/vehicle/train/cargo/trolley,/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage) "bAb" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/turf/simulated/floor,/area/quartermaster/office) @@ -4429,7 +4429,7 @@ "bHi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{tag = "icon-map_scrubber_on (NORTH)"; icon_state = "map_scrubber_on"; dir = 1},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"},/area/medical/genetics_cloning) "bHj" = (/obj/structure/table,/obj/item/weapon/book/manual/medical_cloning{pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "whitepurple"},/area/medical/genetics) "bHk" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) -"bHl" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/obj/machinery/door_control{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access_txt = "5"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = -4; range = 4; req_access_txt = "5"; step_y = 0},/turf/simulated/floor,/area/medical/reception) +"bHl" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/obj/machinery/door_control{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access_txt = "5"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = -4; range = 4; req_access_txt = "5"},/turf/simulated/floor,/area/medical/reception) "bHm" = (/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) "bHn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics) "bHo" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/device/radio/headset/headset_medsci,/obj/item/device/flashlight/pen{pixel_x = 0},/obj/item/device/flashlight/pen{pixel_x = 4; pixel_y = 3},/obj/machinery/requests_console{department = "Genetics"; departmentType = 0; name = "Genetics Requests Console"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/medical/genetics) @@ -5134,7 +5134,7 @@ "bUL" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the singularity chamber."; dir = 8; layer = 4; name = "Singularity Engine Telescreen"; network = list("Singularity"); pixel_x = 0; pixel_y = 30},/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/atmos) "bUM" = (/obj/machinery/power/monitor,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "caution"; dir = 5},/area/atmos) "bUN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24;12"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; layer = 2.6; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos) -"bUO" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 4; name = "Cargo Recieving Dock"},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; req_one_access_txt = "13;31"; step_x = 0; tag_door = "cargo_bay_door"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) +"bUO" = (/obj/machinery/camera{c_tag = "Cargo Recieving Dock"; dir = 4; name = "Cargo Recieving Dock"},/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; req_one_access_txt = "13;31"; tag_door = "cargo_bay_door"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage) "bUP" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{tag = "icon-intact-scrubbers (NORTH)"; icon_state = "intact-scrubbers"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bUQ" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; listening = 0; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Medbay Center"; dir = 4; name = "Medbay Center"; network = list("SS13","Medical")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/medbay2) "bUR" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor,/area/medical/surgery)