diff --git a/.travis.yml b/.travis.yml index da060b19fe..043755d6b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,4 +36,9 @@ script: - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting ${MACRO_COUNT} or less)"; [ $num -le ${MACRO_COUNT} ]) - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup - python tools/TagMatcher/tag-matcher.py ../.. + - echo "#define UNIT_TEST 1" > code/_unit_tests.dm + - cp config/example/* config/ - DreamMaker polaris.dme + - DreamDaemon polaris.dmb -invisible -trusted -core 2>&1 | tee log.txt + - grep "All Unit Tests Passed" log.txt + diff --git a/code/__defines/appearance.dm b/code/__defines/appearance.dm new file mode 100644 index 0000000000..faa97e8f06 --- /dev/null +++ b/code/__defines/appearance.dm @@ -0,0 +1,3 @@ +// Consider these images/atoms as part of the UI/HUD +#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA +#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR diff --git a/code/__defines/unit_tests.dm b/code/__defines/unit_tests.dm new file mode 100644 index 0000000000..478c75fdb2 --- /dev/null +++ b/code/__defines/unit_tests.dm @@ -0,0 +1,4 @@ +#define ASCII_ESC ascii2text(27) +#define ASCII_RED "[ASCII_ESC]\[31m" +#define ASCII_GREEN "[ASCII_ESC]\[32m" +#define ASCII_RESET "[ASCII_ESC]\[0m" \ No newline at end of file diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 57527aab42..39c3a83995 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -78,7 +78,13 @@ var/global/list/socks_t = list( "Black knee" = "black_knee", "Black thigh" = "black_thigh", "Thin knee" = "thin_knee", "Thin thigh" = "thin_thigh", "Pantyhose" = "pantyhose", "Striped thigh" = "striped_thigh", "Striped knee" = "striped_knee", "Rainbow knee" = "rainbow_knee", "Rainbow thigh" = "rainbow_thigh", - "Fishnets" = "fishnet", "Thin white thigh" = "thinwhite_thigh", "Thin white knee" = "thinwhite_knee", "None") + "Fishnets" = "fishnet", "Thin white thigh" = "thinwhite_thigh", "Thin white knee" = "thinwhite_knee", + "Green striped thigh" = "gstriped_thigh", "Green striped knee" = "gstriped_knee", + "Purple striped thigh" = "pstriped_thigh", "Purple striped knee" = "pstriped_knee", + "Blue striped thigh" = "bstriped_thigh", "Blue striped knee" = "bstriped_knee", + "Yellow striped thigh" = "ystriped_thigh", "Yellow striped knee" = "ystriped_knee", + "Red striped thigh" = "rstriped_thigh", "Red striped knee" = "rstriped_knee", + "Orange striped thigh" = "ostriped_thigh", "Orange striped knee" = "ostriped_knee", "None") //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index a6d5ea89af..3fb0306901 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -30,13 +30,6 @@ return "[output][and_text][input[index]]" - -/proc/ConvertReqString2List(var/list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - //Returns list element or null. Should prevent "index out of bounds" error. proc/listgetindex(var/list/list,index) if(istype(list) && list.len) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index d29c78e83a..133707b794 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -31,7 +31,7 @@ diary << "\[[time_stamp()]]DEBUG: [text][log_end]" for(var/client/C in admins) - if(C.is_preference_enabled(/datum/client_preference/admin/show_debug_logs)) + if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) C << "DEBUG: [text]" @@ -82,6 +82,9 @@ /proc/log_misc(text) diary << "\[[time_stamp()]]MISC: [text][log_end]" +/proc/log_unit_test(text) + world.log << "## UNIT_TEST: [text]" + //pretty print a direction bitflag, can be useful for debugging. /proc/print_dir(var/dir) var/list/comps = list() diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 9213765bbc..9f4ece96f8 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -30,13 +30,10 @@ proc/random_hair_style(gender, species = "Human") var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - - if(gender != NEUTER && gender != PLURAL) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] @@ -52,13 +49,10 @@ proc/random_facial_hair_style(gender, species = "Human") var/list/valid_facialhairstyles = list() for(var/facialhairstyle in facial_hair_styles_list) var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - - if(gender != NEUTER && gender != PLURAL) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue @@ -171,3 +165,88 @@ Proc for attack log creation, because really why not return 0 var/mob/living/silicon/robot/R = thing.loc return (thing in R.module.modules) + +/proc/get_exposed_defense_zone(var/atom/movable/target) + var/obj/item/weapon/grab/G = locate() in target + if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. + return pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg") + else + return pick("chest", "groin") + +/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1) + if(!user || !target) + return 0 + var/user_loc = user.loc + var/target_loc = target.loc + + var/holding = user.get_active_hand() + var/datum/progressbar/progbar + if (progress) + progbar = new(user, time, target) + + var/endtime = world.time+time + var/starttime = world.time + . = 1 + while (world.time < endtime) + sleep(1) + if (progress) + progbar.update(world.time - starttime) + if(!user || !target) + . = 0 + break + if(uninterruptible) + continue + + if(!user || user.incapacitated() || user.loc != user_loc) + . = 0 + break + + if(target.loc != target_loc) + . = 0 + break + + if(user.get_active_hand() != holding) + . = 0 + break + + if (progbar) + qdel(progbar) + +/proc/do_after(mob/user, delay, atom/target = null, needhand = 1, progress = 1, var/incapacitation_flags = INCAPACITATION_DEFAULT) + if(!user) + return 0 + var/atom/target_loc = null + if(target) + target_loc = target.loc + + var/atom/original_loc = user.loc + + var/holding = user.get_active_hand() + + var/datum/progressbar/progbar + if (progress) + progbar = new(user, delay, target) + + var/endtime = world.time + delay + var/starttime = world.time + . = 1 + while (world.time < endtime) + sleep(1) + if (progress) + progbar.update(world.time - starttime) + + if(!user || user.incapacitated(incapacitation_flags) || user.loc != original_loc) + . = 0 + break + + if(target_loc && (!target || target_loc != target.loc)) + . = 0 + break + + if(needhand) + if(user.get_active_hand() != holding) + . = 0 + break + + if (progbar) + qdel(progbar) diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index ebdee3c659..0bcf546123 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -149,6 +149,26 @@ if (rights & R_MENTOR) . += "[seperator]+MENTOR" return . +// Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ). +/proc/hex2rgb(hex) + // Strips the starting #, in case this is ever supplied without one, so everything doesn't break. + if(findtext(hex,"#",1,2)) + hex = copytext(hex, 2) + return list(hex2rgb_r(hex), hex2rgb_g(hex), hex2rgb_b(hex)) + +// The three procs below require that the '#' part of the hex be stripped, which hex2rgb() does automatically. +/proc/hex2rgb_r(hex) + var/hex_to_work_on = copytext(hex,1,3) + return hex2num(hex_to_work_on) + +/proc/hex2rgb_g(hex) + var/hex_to_work_on = copytext(hex,3,5) + return hex2num(hex_to_work_on) + +/proc/hex2rgb_b(hex) + var/hex_to_work_on = copytext(hex,5,7) + return hex2num(hex_to_work_on) + // heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ /proc/heat2color(temp) return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 8057d65f96..dc17e47a59 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -646,47 +646,6 @@ proc/GaussRandRound(var/sigma,var/roundto) else return get_step(ref, base_dir) -/proc/do_mob(var/mob/user, var/mob/target, var/delay = 30, var/numticks = 5, var/needhand = 1) //This is quite an ugly solution but i refuse to use the old request system. - if(!user || !target) return 0 - if(numticks == 0) return 0 - - var/delayfraction = round(delay/numticks) - var/original_user_loc = user.loc - var/original_target_loc = target.loc - var/holding = user.get_active_hand() - - for(var/i = 0, i= 2) - world << "Voting aborted due to game start." - src.reset() - return +/datum/controller/vote/proc/process() //called by master_controller + if(mode) + // No more change mode votes after the game has started. + if(mode == VOTE_GAMEMODE && ticker.current_state >= GAME_STATE_SETTING_UP) + world << "Voting aborted due to game start." + src.reset() + return - // Calculate how much time is remaining by comparing current time, to time of vote start, - // plus vote duration - time_remaining = round((started_time + config.vote_period - world.time)/10) - - if(time_remaining < 0) - result() - for(var/client/C in voting) - if(C) - C << browse(null,"window=vote") - reset() - else - for(var/client/C in voting) - if(C) - C << browse(vote.interface(C),"window=vote") - - voting.Cut() - - proc/autotransfer() - initiate_vote("crew_transfer","the server", 1) - log_debug("The server has called a crew transfer vote") - - proc/autogamemode() - initiate_vote("gamemode","the server", 1) - log_debug("The server has called a gamemode vote") - - proc/reset() - initiator = null - time_remaining = 0 - mode = null - question = null - choices.Cut() - voted.Cut() - voting.Cut() - current_votes.Cut() - additional_text.Cut() - - proc/get_result() - //get the highest number of votes - var/greatest_votes = 0 - var/total_votes = 0 - for(var/option in choices) - var/votes = choices[option] - total_votes += votes - if(votes > greatest_votes) - greatest_votes = votes - //default-vote for everyone who didn't vote - if(!config.vote_no_default && choices.len) - var/non_voters = (clients.len - total_votes) - if(non_voters > 0) - if(mode == "restart") - choices["Continue Playing"] += non_voters - if(choices["Continue Playing"] >= greatest_votes) - greatest_votes = choices["Continue Playing"] - else if(mode == "gamemode") - if(master_mode in choices) - choices[master_mode] += non_voters - if(choices[master_mode] >= greatest_votes) - greatest_votes = choices[master_mode] - else if(mode == "crew_transfer") - var/factor = 0.5 - switch(world.time / (10 * 60)) // minutes - if(0 to 60) - factor = 0.5 - if(61 to 120) - factor = 0.8 - if(121 to 240) - factor = 1 - if(241 to 300) - factor = 1.2 - else - factor = 1.4 - choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor) - world << "Crew Transfer Factor: [factor]" - greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"]) - - - //get all options with that many votes and return them in a list - . = list() - if(greatest_votes) - for(var/option in choices) - if(choices[option] == greatest_votes) - . += option - return . - - proc/announce_result() - var/list/winners = get_result() - var/text - if(winners.len > 0) - if(winners.len > 1) - if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes - text = "Vote Tied Between:\n" - for(var/option in winners) - text += "\t[option]\n" - . = pick(winners) - - for(var/key in current_votes) - if(choices[current_votes[key]] == .) - round_voters += key // Keep track of who voted for the winning round. - if((mode == "gamemode" && . == "Extended") || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes - text += "Vote Result: [.]" - else - if(mode != "gamemode") - text += "Vote Result: [.]" - else - text += "The vote has ended." // What will be shown if it is a gamemode vote that isn't extended - - else - text += "Vote Result: Inconclusive - No Votes!" - if(mode == "add_antagonist") - antag_add_failed = 1 - log_vote(text) - world << "[text]" - return . - - proc/result() - . = announce_result() - var/restart = 0 - if(.) - switch(mode) - if("restart") - if(. == "Restart Round") - restart = 1 - if("gamemode") - if(master_mode != .) - world.save_mode(.) - if(ticker && ticker.mode) - restart = 1 - else - master_mode = . - if("crew_transfer") - if(. == "Initiate Crew Transfer") - init_shift_change(null, 1) - if("add_antagonist") - if(isnull(.) || . == "None") - antag_add_failed = 1 - else - additional_antag_types |= antag_names_to_ids[.] - - if(mode == "gamemode") //fire this even if the vote fails. - if(!round_progressing) - round_progressing = 1 - world << "The round will start soon." - - if(restart) - world << "World restarting due to vote..." - feedback_set_details("end_error","restart vote") - if(blackbox) blackbox.save_all_data_to_sql() - sleep(50) - log_game("Rebooting due to restart vote") - world.Reboot() - - return . - - proc/submit_vote(var/ckey, var/vote) - if(mode) - if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) - return 0 - if(vote && vote >= 1 && vote <= choices.len) - if(current_votes[ckey]) - choices[choices[current_votes[ckey]]]-- - voted += usr.ckey - choices[choices[vote]]++ //check this - current_votes[ckey] = vote - return vote - return 0 - - proc/initiate_vote(var/vote_type, var/initiator_key, var/automatic = 0) - if(!mode) - if(started_time != null && !(check_rights(R_ADMIN) || automatic)) - var/next_allowed_time = (started_time + config.vote_delay) - if(next_allowed_time > world.time) - return 0 + // Calculate how much time is remaining by comparing current time, to time of vote start, + // plus vote duration + time_remaining = round((started_time + config.vote_period - world.time)/10) + if(time_remaining < 0) + result() reset() - switch(vote_type) - if("restart") - choices.Add("Restart Round","Continue Playing") - if("gamemode") - if(ticker.current_state >= 2) - return 0 - choices.Add(config.votable_modes) - for (var/F in choices) - var/datum/game_mode/M = gamemode_cache[F] - if(!M) - continue - gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works - additional_text.Add("[M.required_players]") - gamemode_names["secret"] = "Secret" - if("crew_transfer") - if(check_rights(R_ADMIN|R_MOD, 0)) - question = "End the shift?" - choices.Add("Initiate Crew Transfer", "Continue The Round") + +/datum/controller/vote/proc/autotransfer() + initiate_vote(VOTE_CREW_TRANSFER, "the server", 1) + log_debug("The server has called a crew transfer vote") + +/datum/controller/vote/proc/autogamemode() + initiate_vote(VOTE_GAMEMODE, "the server", 1) + log_debug("The server has called a gamemode vote") + +/datum/controller/vote/proc/reset() + initiator = null + time_remaining = 0 + mode = null + question = null + choices.Cut() + voted.Cut() + current_votes.Cut() + additional_text.Cut() + +/datum/controller/vote/proc/get_result() // Get the highest number of votes + var/greatest_votes = 0 + var/total_votes = 0 + + for(var/option in choices) + var/votes = choices[option] + total_votes += votes + if(votes > greatest_votes) + greatest_votes = votes + + if(!config.vote_no_default && choices.len) // Default-vote for everyone who didn't vote + var/non_voters = (clients.len - total_votes) + if(non_voters > 0) + if(mode == VOTE_RESTART) + choices["Continue Playing"] += non_voters + if(choices["Continue Playing"] >= greatest_votes) + greatest_votes = choices["Continue Playing"] + else if(mode == VOTE_GAMEMODE) + if(master_mode in choices) + choices[master_mode] += non_voters + if(choices[master_mode] >= greatest_votes) + greatest_votes = choices[master_mode] + else if(mode == VOTE_CREW_TRANSFER) + var/factor = 0.5 + switch(world.time / (10 * 60)) // minutes + if(0 to 60) + factor = 0.5 + if(61 to 120) + factor = 0.8 + if(121 to 240) + factor = 1 + if(241 to 300) + factor = 1.2 else - if (get_security_level() == "red" || get_security_level() == "delta") - initiator_key << "The current alert status is too high to call for a crew transfer!" - return 0 - if(ticker.current_state <= 2) - return 0 - initiator_key << "The crew transfer button has been disabled!" - question = "End the shift?" - choices.Add("Initiate Crew Transfer", "Continue The Round") - if("add_antagonist") - if(!config.allow_extra_antags || ticker.current_state >= 2) - return 0 - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(!(antag.id in additional_antag_types) && antag.is_votable()) - choices.Add(antag.role_text) - choices.Add("None") - if("custom") - question = sanitizeSafe(input(usr,"What is the vote for?") as text|null) - if(!question) return 0 - for(var/i=1,i<=10,i++) - var/option = capitalize(sanitize(input(usr,"Please enter an option or hit cancel to finish") as text|null)) - if(!option || mode || !usr.client) break - choices.Add(option) - else - return 0 - mode = vote_type - initiator = initiator_key - started_time = world.time - var/text = "[capitalize(mode)] vote started by [initiator]." - if(mode == "custom") - text += "\n[question]" + factor = 1.4 + choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor) + world << "Crew Transfer Factor: [factor]" + greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"]) - log_vote(text) - world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period/10] seconds to vote." - switch(vote_type) - if("crew_transfer") - world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) - if("gamemode") - world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) - if("custom") - world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) - if(mode == "gamemode" && round_progressing) - round_progressing = 0 - world << "Round start has been delayed." + . = list() // Get all options with that many votes and return them in a list + if(greatest_votes) + for(var/option in choices) + if(choices[option] == greatest_votes) + . += option - time_remaining = round(config.vote_period/10) - return 1 - return 0 +/datum/controller/vote/proc/announce_result() + var/list/winners = get_result() + var/text + if(winners.len > 0) + if(winners.len > 1) + if(mode != VOTE_GAMEMODE || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes + text = "Vote Tied Between:\n" + for(var/option in winners) + text += "\t[option]\n" + . = pick(winners) - proc/interface(var/client/C) - if(!C) return - var/admin = 0 - var/trialmin = 0 - if(C.holder) - if(C.holder.rights & R_ADMIN) - admin = 1 - trialmin = 1 // don't know why we use both of these it's really weird, but I'm 2 lasy to refactor this all to use just admin. - voting |= C - - . = "Voting Panel" - if(mode) - if(question) . += "

Vote: '[question]'

" - else . += "

Vote: [capitalize(mode)]

" - . += "Time Left: [time_remaining] s
" - . += "" - if(capitalize(mode) == "Gamemode") .+= "" - - for(var/i = 1, i <= choices.len, i++) - var/votes = choices[choices[i]] - if(!votes) votes = 0 - . += "" - if(mode == "gamemode") - if(current_votes[C.ckey] == i) - . += "" - else - . += "" - else - if(current_votes[C.ckey] == i) - . += "" - else - . += "" - if (additional_text.len >= i) - . += additional_text[i] - . += "" - - . += "
ChoicesVotesMinimum Players
[gamemode_names[choices[i]]][votes][gamemode_names[choices[i]]][votes][choices[i]][votes][choices[i]][votes]

" - if(admin) - . += "(Cancel Vote) " + for(var/key in current_votes) + if(choices[current_votes[key]] == .) + round_voters += key // Keep track of who voted for the winning round. + if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes + text += "Vote Result: [.]" else - . += "

Start a vote:



" - . += "Close" - return . + text += "The vote has ended." + else + text += "Vote Result: Inconclusive - No Votes!" + if(mode == VOTE_ADD_ANTAGONIST) + antag_add_failed = 1 + log_vote(text) + world << "[text]" - Topic(href,href_list[],hsrc) - if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid - switch(href_list["vote"]) - if("close") - voting -= usr.client - usr << browse(null, "window=vote") - return - if("cancel") - if(usr.client.holder) - reset() - if("toggle_restart") - if(usr.client.holder) - config.allow_vote_restart = !config.allow_vote_restart - if("toggle_gamemode") - if(usr.client.holder) - config.allow_vote_mode = !config.allow_vote_mode - if("restart") - if(config.allow_vote_restart || usr.client.holder) - initiate_vote("restart",usr.key) - if("gamemode") - if(config.allow_vote_mode || usr.client.holder) - initiate_vote("gamemode",usr.key) - if("crew_transfer") - if(config.allow_vote_restart || usr.client.holder) - initiate_vote("crew_transfer",usr.key) - if("add_antagonist") - if(config.allow_extra_antags) - initiate_vote("add_antagonist",usr.key) - if("custom") - if(usr.client.holder) - initiate_vote("custom",usr.key) +/datum/controller/vote/proc/result() + . = announce_result() + var/restart = 0 + if(.) + switch(mode) + if(VOTE_RESTART) + if(. == "Restart Round") + restart = 1 + if(VOTE_GAMEMODE) + if(master_mode != .) + world.save_mode(.) + if(ticker && ticker.mode) + restart = 1 + else + master_mode = . + if(VOTE_CREW_TRANSFER) + if(. == "Initiate Crew Transfer") + init_shift_change(null, 1) + if(VOTE_ADD_ANTAGONIST) + if(isnull(.) || . == "None") + antag_add_failed = 1 + else + additional_antag_types |= antag_names_to_ids[.] + + if(mode == VOTE_GAMEMODE) //fire this even if the vote fails. + if(!round_progressing) + round_progressing = 1 + world << "The round will start soon." + + if(restart) + world << "World restarting due to vote..." + feedback_set_details("end_error", "restart vote") + if(blackbox) + blackbox.save_all_data_to_sql() + sleep(50) + log_game("Rebooting due to restart vote") + world.Reboot() + +/datum/controller/vote/proc/submit_vote(var/ckey, var/newVote) + if(mode) + if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) + return + if(current_votes[ckey]) + choices[choices[current_votes[ckey]]]-- + if(newVote && newVote >= 1 && newVote <= choices.len) + choices[choices[newVote]]++ + current_votes[ckey] = newVote + else + current_votes[ckey] = null + +/datum/controller/vote/proc/initiate_vote(var/vote_type, var/initiator_key, var/automatic = 0) + if(!mode) + if(started_time != null && !(check_rights(R_ADMIN) || automatic)) + var/next_allowed_time = (started_time + config.vote_delay) + if(next_allowed_time > world.time) + return 0 + + reset() + + switch(vote_type) + if(VOTE_RESTART) + choices.Add("Restart Round", "Continue Playing") + if(VOTE_GAMEMODE) + if(ticker.current_state >= GAME_STATE_SETTING_UP) + return 0 + choices.Add(config.votable_modes) + for(var/F in choices) + var/datum/game_mode/M = gamemode_cache[F] + if(!M) + continue + gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works + additional_text.Add("[M.required_players]") + gamemode_names["secret"] = "Secret" + if(VOTE_CREW_TRANSFER) + if(!check_rights(R_ADMIN|R_MOD, 0)) // The gods care not for the affairs of the mortals + if(get_security_level() == "red" || get_security_level() == "delta") + initiator_key << "The current alert status is too high to call for a crew transfer!" + return 0 + if(ticker.current_state <= GAME_STATE_SETTING_UP) + initiator_key << "The crew transfer button has been disabled!" + return 0 + question = "End the shift?" + choices.Add("Initiate Crew Transfer", "Continue The Round") + if(VOTE_ADD_ANTAGONIST) + if(!config.allow_extra_antags || ticker.current_state >= GAME_STATE_SETTING_UP) + return 0 + for(var/antag_type in all_antag_types) + var/datum/antagonist/antag = all_antag_types[antag_type] + if(!(antag.id in additional_antag_types) && antag.is_votable()) + choices.Add(antag.role_text) + choices.Add("None") + if(VOTE_CUSTOM) + question = sanitizeSafe(input(usr, "What is the vote for?") as text|null) + if(!question) + return 0 + for(var/i = 1 to 10) + var/option = capitalize(sanitize(input(usr, "Please enter an option or hit cancel to finish") as text|null)) + if(!option || mode || !usr.client) + break + choices.Add(option) else - var/t = round(text2num(href_list["vote"])) - if(t) // It starts from 1, so there's no problem - submit_vote(usr.ckey, t) - usr.vote() + return 0 + mode = vote_type + initiator = initiator_key + started_time = world.time + var/text = "[capitalize(mode)] vote started by [initiator]." + if(mode == VOTE_CUSTOM) + text += "\n[question]" -/mob/verb/vote() + log_vote(text) + + world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote." + if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM) + world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) + + if(mode == VOTE_GAMEMODE && round_progressing) + round_progressing = 0 + world << "Round start has been delayed." + + time_remaining = round(config.vote_period / 10) + return 1 + return 0 + +/datum/controller/vote/proc/interface(var/client/C) + if(!istype(C)) + return + var/admin = 0 + if(C.holder) + if(C.holder.rights & R_ADMIN) + admin = 1 + + . = "Voting Panel" + if(mode) + if(question) + . += "

Vote: '[question]'

" + else + . += "

Vote: [capitalize(mode)]

" + . += "Time Left: [time_remaining] s
" + . += "" + if(mode == VOTE_GAMEMODE) + .+= "" + + for(var/i = 1 to choices.len) + var/votes = choices[choices[i]] + if(!votes) + votes = 0 + . += "" + var/thisVote = (current_votes[C.ckey] == i) + if(mode == VOTE_GAMEMODE) + . += "" + else + . += "" + if (additional_text.len >= i) + . += additional_text[i] + . += "" + + . += "" + + . += "
ChoicesVotesMinimum Players
[thisVote ? "" : ""][gamemode_names[choices[i]]][thisVote ? "" : ""][votes][thisVote ? "" : ""][choices[i]][thisVote ? "" : ""][votes]
Unvote

" + if(admin) + . += "(Cancel Vote) " + else + . += "

Start a vote:



" + + . += "Close" + +/datum/controller/vote/Topic(href, href_list[]) + if(!usr || !usr.client) + return + switch(href_list["vote"]) + if("close") + usr << browse(null, "window=vote") + return + + if("cancel") + if(usr.client.holder) + reset() + if("toggle_restart") + if(usr.client.holder) + config.allow_vote_restart = !config.allow_vote_restart + if("toggle_gamemode") + if(usr.client.holder) + config.allow_vote_mode = !config.allow_vote_mode + + if(VOTE_RESTART) + if(config.allow_vote_restart || usr.client.holder) + initiate_vote(VOTE_RESTART, usr.key) + if(VOTE_GAMEMODE) + if(config.allow_vote_mode || usr.client.holder) + initiate_vote(VOTE_GAMEMODE, usr.key) + if(VOTE_CREW_TRANSFER) + if(config.allow_vote_restart || usr.client.holder) + initiate_vote(VOTE_CREW_TRANSFER, usr.key) + if(VOTE_ADD_ANTAGONIST) + if(config.allow_extra_antags || usr.client.holder) + initiate_vote(VOTE_ADD_ANTAGONIST, usr.key) + if(VOTE_CUSTOM) + if(usr.client.holder) + initiate_vote(VOTE_CUSTOM, usr.key) + + if("unvote") + submit_vote(usr.ckey, null) + + else + var/t = round(text2num(href_list["vote"])) + if(t) // It starts from 1, so there's no problem + submit_vote(usr.ckey, t) + usr.client.vote() + +/client/verb/vote() set category = "OOC" set name = "Vote" if(vote) - src << browse(vote.interface(client),"window=vote") + src << browse(vote.interface(src), "window=vote;size=500x[300 + vote.choices.len * 25]") diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index f9b05a3afe..0d0f77a957 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -74,11 +74,21 @@ if(real_rank in civilian_positions) civ[name] = rank department = 1 - if(real_rank in nonhuman_positions) - bot[name] = rank - department = 1 if(!department && !(name in heads)) misc[name] = rank + + // Synthetics don't have actual records, so we will pull them from here. + for(var/mob/living/silicon/ai/ai in mob_list) + bot[ai.name] = "Artificial Intelligence" + + for(var/mob/living/silicon/robot/robot in mob_list) + // No combat/syndicate cyborgs, no drones. + if(robot.module && robot.module.hide_on_manifest) + continue + + bot[robot.name] = "[robot.modtype] [robot.braintype]" + + if(heads.len > 0) dat += "Heads" for(name in heads) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index bee722f1b4..fb5a2e754c 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -109,6 +109,8 @@ output += "Objective #[obj_count]: [objective.explanation_text]" obj_count++ + if(ambitions) + output += "
Ambitions: [ambitions]
" recipient << browse(output,"window=memory") /datum/mind/proc/edit_memory() @@ -142,7 +144,8 @@ else out += "None." - out += "
\[add\]" + out += "
\[add\]

" + out += "Ambitions: [ambitions ? ambitions : "None"] \[edit\]
" usr << browse(out, "window=edit_memory[src]") /datum/mind/Topic(href, href_list) @@ -182,6 +185,18 @@ if (isnull(new_memo)) return memory = new_memo + else if (href_list["amb_edit"]) + var/datum/mind/mind = locate(href_list["amb_edit"]) + if(!mind) + return + var/new_ambition = input("Enter a new ambition", "Memory", mind.ambitions) as null|message + if(isnull(new_ambition)) + return + if(mind) + mind.ambitions = sanitize(new_ambition) + mind.current << "Your ambitions have been changed by higher powers, they are now: [mind.ambitions]" + log_and_message_admins("made [key_name(mind.current)]'s ambitions be '[mind.ambitions]'.") + else if (href_list["obj_edit"] || href_list["obj_add"]) var/datum/objective/objective var/objective_pos diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm new file mode 100644 index 0000000000..bed0f33275 --- /dev/null +++ b/code/datums/progressbar.dm @@ -0,0 +1,43 @@ +/datum/progressbar + var/goal = 1 + var/image/bar + var/shown = 0 + var/mob/user + var/client/client + +/datum/progressbar/New(mob/user, goal_number, atom/target) + . = ..() + if(!target) target = user + if (!istype(target)) + EXCEPTION("Invalid target given") + if (goal_number) + goal = goal_number + bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0") + bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + bar.pixel_y = 32 + src.user = user + if(user) + client = user.client + +/datum/progressbar/Destroy() + if (client) + client.images -= bar + qdel(bar) + . = ..() + +/datum/progressbar/proc/update(progress) + //world << "Update [progress] - [goal] - [(progress / goal)] - [((progress / goal) * 100)] - [round(((progress / goal) * 100), 5)]" + if (!user || !user.client) + shown = 0 + return + if (user.client != client) + if (client) + client.images -= bar + shown = 0 + client = user.client + + progress = Clamp(progress, 0, goal) + bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" + if (!shown && user.is_preference_enabled(/datum/client_preference/show_progress_bar)) + user.client.images += bar + shown = 1 diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 96b01b4242..460a13f7b7 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -69,23 +69,38 @@ break return . -/datum/recipe/proc/check_items(var/obj/machinery/microwave/container as obj) +/datum/recipe/proc/check_items(var/obj/container as obj) . = 1 if (items && items.len) var/list/checklist = list() checklist = items.Copy() // You should really trust Copy - for(var/obj/O in container.ingredient_list) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = 0 - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - checklist.Cut(i, i+1) - found = 1 - break - if (!found) - . = 0 + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for(var/obj/O in (machine.contents - machine.component_parts)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = 0 + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + checklist.Cut(i, i+1) + found = 1 + break + if (!found) + . = 0 + else + for(var/obj/O in container.contents) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = 0 + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + checklist.Cut(i, i+1) + found = 1 + break + if (!found) + . = 0 if (checklist.len) . = -1 return . @@ -93,25 +108,39 @@ //general version /datum/recipe/proc/make(var/obj/container as obj) var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for (var/obj/O in ((machine.contents-result_obj)-machine.component_parts)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + else + for (var/obj/O in (container.contents-result_obj)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) container.reagents.clear_reagents() return result_obj // food-related -/datum/recipe/proc/make_food(var/obj/machinery/microwave/container as obj) +/datum/recipe/proc/make_food(var/obj/container as obj) if(!result) world << "Recipe [type] is defined without a result, please bug this." return var/obj/result_obj = new result(container) - for (var/obj/O in (container.ingredient_list)) //We no longer need to take result_obj out of the list, since it doesn't exist in the list. - if (O.reagents) - O.reagents.del_reagent("nutriment") - O.reagents.update_total() - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - container.ingredient_list.Cut() //Trust in Cut(). + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for (var/obj/O in ((machine.contents-result_obj)-machine.component_parts)) + if (O.reagents) + O.reagents.del_reagent("nutriment") + O.reagents.update_total() + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + else + for (var/obj/O in (container.contents-result_obj)) + if (O.reagents) + O.reagents.del_reagent("nutriment") + O.reagents.update_total() + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) container.reagents.clear_reagents() return result_obj diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index c26d392a28..a2157fa39e 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -221,6 +221,12 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee name = "Janitorial supplies" contains = list(/obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/mop, + /obj/item/clothing/under/rank/janitor, + /obj/item/weapon/cartridge/janitor, + /obj/item/clothing/gloves/black, + /obj/item/clothing/head/soft/purple, + /obj/item/weapon/storage/belt/janitor, + /obj/item/clothing/shoes/galoshes, /obj/item/weapon/caution, /obj/item/weapon/caution, /obj/item/weapon/caution, @@ -1635,6 +1641,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee num_contained = 4 contains = list(/obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/clothing/accessory/storage/white_vest, /obj/item/clothing/accessory/storage/webbing) cost = 15 containertype = "/obj/structure/closet/crate" @@ -2074,7 +2081,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/cartridge/medical, /obj/item/device/flashlight/pen, /obj/item/weapon/reagent_containers/syringe, - /obj/item/clothing/accessory/storage/brown_vest) + /obj/item/clothing/accessory/storage/white_vest) cost = 20 containertype = "/obj/structure/closet/crate/secure" containername = "Paramedic equipment" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 02b6315104..39c91afbed 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -129,6 +129,13 @@ icon_state = "nullrod" item_state = "foldcane" +/obj/item/weapon/cane/whitecane + name = "white cane" + desc = "A cane used by the blind." + icon = 'icons/obj/weapons.dmi' + icon_state = "whitecane" + item_state = "whitecane" + /obj/item/weapon/disk name = "disk" icon = 'icons/obj/items.dmi' diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index 9f594f9b63..e42888737f 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -30,6 +30,12 @@ if(faction_verb && player.current) player.current.verbs |= faction_verb + spawn(1 SECOND) //Added a delay so that this should pop up at the bottom and not the top of the text flood the new antag gets. + player.current << "Once you decide on a goal to pursue, you can optionally display it to \ + everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ + and it otherwise has no bearing on your round." + player.current.verbs |= /mob/living/proc/write_ambition + // Handle only adding a mind and not bothering with gear etc. if(nonstandard_role_type) faction_members |= player @@ -50,5 +56,8 @@ player.special_role = null update_icons_removed(player) BITSET(player.current.hud_updateflag, SPECIALROLE_HUD) + if(!is_special_character(player)) + player.current.verbs -= /mob/living/proc/write_ambition + player.ambitions = "" return 1 return 0 \ No newline at end of file diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 5d1663b8dd..24cca9d640 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -104,17 +104,6 @@ create_nuke() show_objectives(player) - - player.current << "Once you decide on a goal to pursue, you can optionally display it to \ - everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ - and it otherwise has no bearing on your round." - player.current.verbs |= /mob/living/proc/write_ambition - - // Clown clumsiness check, I guess downstream might use it. - if (player.current.mind) - if (player.current.mind.assigned_role == "Clown") - player.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." - player.current.mutations.Remove(CLUMSY) return 1 /datum/antagonist/proc/set_antag_name(var/mob/living/player) diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index 21884dd58d..6359710378 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -37,14 +37,19 @@ if(!mind) return - if(!src.mind.special_role) + if(!is_special_character(mind)) src << "While you may perhaps have goals, this verb's meant to only be visible \ to antagonists. Please make a bug report!" return var/new_ambitions = input(src, "Write a short sentence of what your character hopes to accomplish \ today as an antagonist. Remember that this is purely optional. It will be shown at the end of the \ round for everybody else.", "Ambitions", mind.ambitions) as null|message + if(isnull(new_ambitions)) + return + mind.ambitions = new_ambitions new_ambitions = sanitize(new_ambitions) if(new_ambitions) - mind.ambitions = new_ambitions src << "You've set your goal to be '[new_ambitions]'." + else + src << "You leave your ambitions behind." + log_and_message_admins("has set their ambitions to now be: [new_ambitions].") diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index 62f9eabbd1..d862239a9f 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -9,7 +9,7 @@ text += get_special_objective_text(P) if(P.ambitions) text += "
Their goals for today were..." - text += "
[P.ambitions]" + text += "
[P.ambitions]" if(!global_objectives.len && P.objectives && P.objectives.len) var/failed var/num = 1 diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index bcc89a0295..0a68becfd6 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -27,7 +27,7 @@ var/datum/antagonist/raider/raiders /obj/item/clothing/under/serviceoveralls, /obj/item/clothing/under/captain_fly, /obj/item/clothing/under/det, - /obj/item/clothing/under/brown, + /obj/item/clothing/under/color/brown, ) var/list/raider_shoes = list( diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index f6741cafa0..ac8c0ef44d 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -76,7 +76,7 @@ var/datum/antagonist/wizard/wizards return 0 wizard_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(wizard_mob), slot_l_ear) - wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(wizard_mob), slot_w_uniform) + wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 18704058d1..bba83cd42a 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -838,6 +838,10 @@ area/space/atmosalert() /area/maintenance/engineering name = "Engineering Maintenance" icon_state = "maint_engineering" + +/area/maintenance/engineering/pumpstation + name = "Engineering Pump Station" + icon_state = "maint_pumpstation" /area/maintenance/evahallway name = "\improper EVA Maintenance" diff --git a/code/game/gamemodes/changeling/absorbed_dna.dm b/code/game/gamemodes/changeling/absorbed_dna.dm new file mode 100644 index 0000000000..2527f90697 --- /dev/null +++ b/code/game/gamemodes/changeling/absorbed_dna.dm @@ -0,0 +1,12 @@ +/datum/absorbed_dna + var/name + var/datum/dna/dna + var/speciesName + var/list/languages + +/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages) + ..() + name = newName + dna = newDNA + speciesName = newSpecies + languages = newLanguages diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 0ac3d8d35d..23bd46243e 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,5 +1,5 @@ /datum/game_mode/changeling - name = "changeling" + name = "Changeling" round_description = "There are alien changelings on the station. Do not let the changelings succeed!" extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. \ Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet \ diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 84d6bb8536..7e6563ca4b 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -1,9 +1,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") /datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) - var/list/absorbed_dna = list() - var/list/absorbed_species = list() - var/list/absorbed_languages = list() + var/list/datum/absorbed_dna/absorbed_dna = list() + var/list/absorbed_languages = list() // Necessary because of set_species stuff var/absorbedcount = 0 var/chem_charges = 20 var/chem_recharge_rate = 0.5 @@ -23,25 +22,36 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E /datum/changeling/New(var/gender=FEMALE) ..() - var/honorific = (gender == FEMALE) ? "Ms." : "Mr." if(possible_changeling_IDs.len) changelingID = pick(possible_changeling_IDs) possible_changeling_IDs -= changelingID - changelingID = "[honorific] [changelingID]" + changelingID = "[changelingID]" else - changelingID = "[honorific] [rand(1,999)]" + changelingID = "[rand(1,999)]" /datum/changeling/proc/regenerate() chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage) geneticdamage = max(0, geneticdamage-1) /datum/changeling/proc/GetDNA(var/dna_owner) - var/datum/dna/chosen_dna - for(var/datum/dna/DNA in absorbed_dna) - if(dna_owner == DNA.real_name) - chosen_dna = DNA - break - return chosen_dna + for(var/datum/absorbed_dna/DNA in absorbed_dna) + if(dna_owner == DNA.name) + return DNA + +/mob/proc/absorbDNA(var/datum/absorbed_dna/newDNA) + var/datum/changeling/changeling = null + if(src.mind && src.mind.changeling) + changeling = src.mind.changeling + if(!changeling) + return + + for(var/language in newDNA.languages) + changeling.absorbed_languages |= language + + changeling_update_languages(changeling.absorbed_languages) + + if(!changeling.GetDNA(newDNA.name)) // Don't duplicate - I wonder if it's possible for it to still be a different DNA? DNA code could use a rewrite + changeling.absorbed_dna += newDNA //Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human /mob/proc/make_changeling() @@ -70,14 +80,13 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!(P in src.verbs)) src.verbs += P.verbpath - mind.changeling.absorbed_dna |= dna + for(var/language in languages) + mind.changeling.absorbed_languages |= language var/mob/living/carbon/human/H = src if(istype(H)) - mind.changeling.absorbed_species += H.species.name - - for(var/language in languages) - mind.changeling.absorbed_languages |= language + var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages) + absorbDNA(newDNA) return 1 @@ -118,10 +127,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E return changeling - //Used to dump the languages from the changeling datum into the actual mob. /mob/proc/changeling_update_languages(var/updated_languages) - languages = list() for(var/language in updated_languages) languages += language @@ -129,8 +136,6 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E //This isn't strictly necessary but just to be safe... add_language("Changeling") - return - ////////// //STINGS// //They get a pretty header because there's just so fucking many of them ;_; ////////// @@ -171,9 +176,3 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting T << "You feel a tiny prick." return - - - - - - diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index d145f95946..16f34357b5 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -65,33 +65,21 @@ src << "We have absorbed [T]!" src.visible_message("[src] sucks the fluids from [T]!") T << "You have been absorbed by the changeling!" - - T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. - changeling.absorbed_dna |= T.dna if(src.nutrition < 400) src.nutrition = min((src.nutrition + T.nutrition), 400) changeling.chem_charges += 10 -// changeling.geneticpoints += 2 src.verbs += /mob/proc/changeling_respec src << "We can now re-adapt, reverting our evolution so that we may start anew, if needed." - //Steal all of their languages! - for(var/language in T.languages) - if(!(language in changeling.absorbed_languages)) - changeling.absorbed_languages += language - - changeling_update_languages(changeling.absorbed_languages) - - //Steal their species! - if(T.species && !(T.species.name in changeling.absorbed_species)) - changeling.absorbed_species += T.species.name + var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) + absorbDNA(newDNA) if(T.mind && T.mind.changeling) if(T.mind.changeling.absorbed_dna) - for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot + for(var/datum/absorbed_dna/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot if(dna_data in changeling.absorbed_dna) continue - changeling.absorbed_dna += dna_data + absorbDNA(dna_data) changeling.absorbedcount++ T.mind.changeling.absorbed_dna.len = 1 diff --git a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm index 9b0d1e149a..a761a5335c 100644 --- a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm +++ b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm @@ -19,6 +19,9 @@ var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting) + if(!T) + return + if(!istype(T) || T.isSynthetic()) src << "\The [T] is not compatible with our biology." return 0 @@ -31,10 +34,8 @@ src << "This creature's DNA is ruined beyond useability!" return 0 - T.dna.real_name = T.real_name - changeling.absorbed_dna |= T.dna - if(T.species && !(T.species.name in changeling.absorbed_species)) - changeling.absorbed_species += T.species.name + var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) + absorbDNA(newDNA) feedback_add_details("changeling_powers","ED") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm index 940df49cd9..8a469f9f27 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -27,9 +27,9 @@ var/list/datum/dna/hivemind_bank = list() if(!changeling) return var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) + for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) if(!(DNA in hivemind_bank)) - names += DNA.real_name + names += DNA.name if(names.len <= 0) src << "The airwaves already have all of our DNA." @@ -38,7 +38,7 @@ var/list/datum/dna/hivemind_bank = list() var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names if(!S) return - var/datum/dna/chosen_dna = changeling.GetDNA(S) + var/datum/absorbed_dna/chosen_dna = changeling.GetDNA(S) if(!chosen_dna) return @@ -57,9 +57,9 @@ var/list/datum/dna/hivemind_bank = list() if(!changeling) return var/list/names = list() - for(var/datum/dna/DNA in hivemind_bank) + for(var/datum/absorbed_dna/DNA in hivemind_bank) if(!(DNA in changeling.absorbed_dna)) - names[DNA.real_name] = DNA + names[DNA.name] = DNA if(names.len <= 0) src << "There's no new DNA to absorb from the air." @@ -67,12 +67,12 @@ var/list/datum/dna/hivemind_bank = list() var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names if(!S) return - var/datum/dna/chosen_dna = names[S] + var/datum/absorbed_dna/chosen_dna = names[S] if(!chosen_dna) return changeling.chem_charges -= 20 - changeling.absorbed_dna += chosen_dna + absorbDNA(chosen_dna) src << "We absorb the DNA of [S] from the air." feedback_add_details("changeling_powers","HD") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/self_respiration.dm b/code/game/gamemodes/changeling/powers/self_respiration.dm index a00ec7958c..96b8f3d277 100644 --- a/code/game/gamemodes/changeling/powers/self_respiration.dm +++ b/code/game/gamemodes/changeling/powers/self_respiration.dm @@ -1,8 +1,8 @@ /datum/power/changeling/self_respiration name = "Self Respiration" - desc = "We evolve our body to no longer require drawing oxygen from the atmosphere.." + desc = "We evolve our body to no longer require drawing oxygen from the atmosphere." helptext = "We will no longer require internals, and we cannot inhale any gas, including harmful ones." - genomecost = 1 + genomecost = 0 isVerb = 0 verbpath = /mob/proc/changeling_self_respiration diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 99f1a4d130..793b3a42ea 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -4,12 +4,6 @@ genomecost = 0 verbpath = /mob/proc/changeling_transform -/datum/power/changeling/change_species - name = "Change Species" - desc = "We take on the apperance of a species that we have absorbed." - genomecost = 0 - verbpath = /mob/proc/changeling_change_species - //Change our DNA to that of somebody we've absorbed. /mob/proc/changeling_transform() set category = "Changeling" @@ -19,73 +13,42 @@ if(!changeling) return var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - names += "[DNA.real_name]" + for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) + names += "[DNA.name]" var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names if(!S) return - var/datum/dna/chosen_dna = changeling.GetDNA(S) + var/datum/absorbed_dna/chosen_dna = changeling.GetDNA(S) if(!chosen_dna) return changeling.chem_charges -= 5 src.visible_message("[src] transforms!") changeling.geneticdamage = 5 - src.dna = chosen_dna.Clone() + + if(ishuman(src)) + var/mob/living/carbon/human/H = src + var/newSpecies = chosen_dna.speciesName + H.set_species(newSpecies,1) + + src.dna = chosen_dna.dna.Clone() src.dna.b_type = "AB+" //This is needed to avoid blood rejection bugs. The fact that the blood type might not match up w/ records could be a *FEATURE* too. if(ishuman(src)) var/mob/living/carbon/human/H = src H.b_type = "AB+" //For some reason we have two blood types on the mob. for(var/flavor in H.flavor_texts) //Nulls out flavor text, so we don't keep our previous mob's flavor. flavor = null - src.real_name = chosen_dna.real_name + src.real_name = chosen_dna.name src.flavor_text = "" src.UpdateAppearance() domutcheck(src, null) + changeling_update_languages(changeling.absorbed_languages) src.verbs -= /mob/proc/changeling_transform - spawn(10) src.verbs += /mob/proc/changeling_transform + spawn(10) + src.verbs += /mob/proc/changeling_transform + src.regenerate_icons() feedback_add_details("changeling_powers","TR") return 1 - -//Used to switch species based on the changeling datum. -/mob/proc/changeling_change_species() - - set category = "Changeling" - set name = "Change Species (5)" - - var/mob/living/carbon/human/H = src - if(!istype(H)) - src << "We may only use this power while in humanoid form." - return - - var/datum/changeling/changeling = changeling_power(5,1,0) - if(!changeling) return - - if(changeling.absorbed_species.len < 2) - src << "We do not know of any other species genomes to use." - return - - var/S = input("Select the target species: ", "Target Species", null) as null|anything in changeling.absorbed_species - if(!S) return - - domutcheck(src, null) - - changeling.chem_charges -= 5 - changeling.geneticdamage = 5 - - src.visible_message("[src] transforms!") - - src.verbs -= /mob/proc/changeling_change_species - H.set_species(S,1) //Until someone moves body colour into DNA, they're going to have to use the default. - - spawn(10) - src.verbs += /mob/proc/changeling_change_species - src.regenerate_icons() - - changeling_update_languages(changeling.absorbed_languages) - feedback_add_details("changeling_powers","TR") - - return 1 \ No newline at end of file diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 569d034cad..853d3f02dc 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -185,7 +185,6 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," throw_range = 5 w_class = 2.0 unique = 1 - var/notedat = "" var/tomedat = "" var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri") @@ -285,57 +284,12 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," "} - - Topic(href,href_list[]) - if (src.loc == usr) - var/number = text2num(href_list["number"]) - if (usr.stat|| usr.restrained()) - return - switch(href_list["action"]) - if("clear") - words[words[number]] = words[number] - if("change") - words[words[number]] = input("Enter the translation for [words[number]]", "Word notes") in engwords - for (var/w in words) - if ((words[w] == words[words[number]]) && (w != words[number])) - words[w] = w - notedat = {" -
Word translation notes
- [words[1]] is [words[words[1]]] Clear
- [words[2]] is [words[words[2]]] Clear
- [words[3]] is [words[words[3]]] Clear
- [words[4]] is [words[words[4]]] Clear
- [words[5]] is [words[words[5]]] Clear
- [words[6]] is [words[words[6]]] Clear
- [words[7]] is [words[words[7]]] Clear
- [words[8]] is [words[words[8]]] Clear
- [words[9]] is [words[words[9]]] Clear
- [words[10]] is [words[words[10]]] Clear
- "} - usr << browse("[notedat]", "window=notes") -// call(/obj/item/weapon/book/tome/proc/edit_notes)() - else - usr << browse(null, "window=notes") - return - - -// proc/edit_notes() FUCK IT. Cant get it to work properly. - K0000 -// world << "its been called! [usr]" -// notedat = {" -//
Word translation notes
-// [words[1]] is [words[words[1]]] Clear
-// [words[2]] is [words[words[2]]] Clear
-// [words[3]] is [words[words[3]]] Clear
-// [words[4]] is [words[words[4]]] Clear
-// [words[5]] is [words[words[5]]] Clear
-// [words[6]] is [words[words[6]]] Clear
-// [words[7]] is [words[words[7]]] Clear
-// [words[8]] is [words[words[8]]] Clear
-// [words[9]] is [words[words[9]]] Clear
-// [words[10]] is [words[words[10]]] Clear
-// "} -// usr << "whatev" -// usr << browse(null, "window=tank") + New() + ..() + if(!cultwords["travel"]) + runerandom() + for(var/V in cultwords) + words[cultwords[V]] = V attack(mob/living/M as mob, mob/living/user as mob) @@ -378,7 +332,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," alert("The cloth of reality can't take that much of a strain. Remove some runes first!") return else - switch(alert("You open the tome",,"Read it","Scribe a rune", "Notes")) //Fuck the "Cancel" option. Rewrite the whole tome interface yourself if you want it to work better. And input() is just ugly. - K0000 + switch(alert("You open the tome",,"Read it","Scribe a rune", "Cancel")) if("Cancel") return if("Read it") @@ -386,25 +340,6 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," return user << browse("[tomedat]", "window=Arcane Tome") return - if("Notes") - if(usr.get_active_hand() != src) - return - notedat = {" -
Word translation notes
- [words[1]] is [words[words[1]]] Clear
- [words[2]] is [words[words[2]]] Clear
- [words[3]] is [words[words[3]]] Clear
- [words[4]] is [words[words[4]]] Clear
- [words[5]] is [words[words[5]]] Clear
- [words[6]] is [words[words[6]]] Clear
- [words[7]] is [words[words[7]]] Clear
- [words[8]] is [words[words[8]]] Clear
- [words[9]] is [words[words[9]]] Clear
- [words[10]] is [words[words[10]]] Clear
- "} -// call(/obj/item/weapon/book/tome/proc/edit_notes)() - user << browse("[notedat]", "window=notes") - return if(usr.get_active_hand() != src) return @@ -489,21 +424,6 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," user << "The book seems full of illegible scribbles. Is this a joke?" return - attackby(obj/item/weapon/book/tome/T as obj, mob/living/user as mob) - if(istype(T, /obj/item/weapon/book/tome)) // sanity check to prevent a runtime error - switch(alert("Copy the runes from your tome?",,"Copy", "Cancel")) - if("cancel") - return - // var/list/nearby = viewers(1,src) //- Fuck this as well. No clue why this doesnt work. -K0000 - // if (T.loc != user) - // return - // for(var/mob/M in nearby) - // if(M == user) - for(var/entry in words) - words[entry] = T.words[entry] - user << "You copy the translation notes from your tome." - - examine(mob/user) if(!iscultist(user)) user << "An old, dusty tome with frayed edges and a sinister looking cover." diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 88d850283c..4ecef5449a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -423,7 +423,7 @@ var/list/sacrificed = list() L.ajourn=0 return else - L.take_organ_damage(10, 0) + L.take_organ_damage(3, 0) sleep(100) return fizzle() diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm index 4f98bbcc2b..07b8d7f434 100644 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ b/code/game/gamemodes/epidemic/epidemic.dm @@ -1,5 +1,5 @@ /datum/game_mode/epidemic - name = "epidemic" + name = "Epidemic" config_tag = "epidemic" required_players = 1 required_players_secret = 15 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 59327bd65e..a0be65c729 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -39,10 +39,6 @@ var/global/list/additional_antag_types = list() /datum/game_mode/New() ..() - // Enforce some formatting. - // This will probably break something. - name = capitalize(lowertext(name)) - config_tag = lowertext(config_tag) /datum/game_mode/Topic(href, href_list[]) if(..()) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 54524e3cf8..4c390e7c69 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -112,7 +112,7 @@ var/global/datum/controller/gameticker/ticker tmpmodes+=M.name tmpmodes = sortList(tmpmodes) if(tmpmodes.len) - world << "Possibilities: [english_list(tmpmodes)]" + world << "Possibilities: [english_list(tmpmodes, and_text= "; ", comma_text = "; ")]" else src.mode.announce() diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 39b73a8dac..c978cb4ffe 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -5,7 +5,7 @@ VOX HEIST ROUNDTYPE var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime. /datum/game_mode/heist - name = "heist" + name = "Heist" config_tag = "heist" required_players = 15 required_players_secret = 15 diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 558dbe12b6..de868328b3 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -1,5 +1,5 @@ /datum/game_mode/malfunction - name = "AI malfunction" + name = "AI Malfunction" round_description = "The AI is behaving abnormally and must be stopped." extended_round_description = "The AI will attempt to hack the APCs around the station in order to gain as much control as possible." config_tag = "malfunction" diff --git a/code/game/gamemodes/mixed/conflux.dm b/code/game/gamemodes/mixed/conflux.dm index 2d8753ce1a..0e9513bbab 100644 --- a/code/game/gamemodes/mixed/conflux.dm +++ b/code/game/gamemodes/mixed/conflux.dm @@ -1,5 +1,5 @@ /datum/game_mode/conflux - name = "conflux" + name = "Wizard & Cult" round_description = "A space wizard and a cult have invaded the station!" extended_round_description = "Cultists and wizards spawn during this round." config_tag = "conflux" diff --git a/code/game/gamemodes/mixed/infestation.dm b/code/game/gamemodes/mixed/infestation.dm index 346f51967c..34bd062b80 100644 --- a/code/game/gamemodes/mixed/infestation.dm +++ b/code/game/gamemodes/mixed/infestation.dm @@ -1,5 +1,5 @@ /datum/game_mode/infestation - name = "infestation" + name = "Borers & Changelings" round_description = "There's something in the walls!" extended_round_description = "Two alien antagonists (Cortical Borers or Changelings) spawn during this round." config_tag = "infestation" diff --git a/code/game/gamemodes/mixed/intrigue.dm b/code/game/gamemodes/mixed/intrigue.dm index d08452e6dd..5c432c30db 100644 --- a/code/game/gamemodes/mixed/intrigue.dm +++ b/code/game/gamemodes/mixed/intrigue.dm @@ -1,11 +1,11 @@ /datum/game_mode/intrigue - name = "Intrigue" + name = "Traitors & Ninja" round_description = "Crewmembers are contacted by external elements while another infiltrates the colony." extended_round_description = "Traitors and a ninja spawn during this round." config_tag = "intrigue" - required_players = 15 - required_players_secret = 15 - required_enemies = 4 + required_players = 6 + required_players_secret = 8 + required_enemies = 3 end_on_antag_death = 0 antag_tags = list(MODE_NINJA, MODE_AUTOTRAITOR) round_autoantag = 1 diff --git a/code/game/gamemodes/mixed/lizard.dm b/code/game/gamemodes/mixed/lizard.dm index c61b9e6094..3323db503b 100644 --- a/code/game/gamemodes/mixed/lizard.dm +++ b/code/game/gamemodes/mixed/lizard.dm @@ -1,11 +1,11 @@ /datum/game_mode/lizard - name = "lizard" + name = "Wizard & Changelings" round_description = "A space wizard and changelings have invaded the station!" extended_round_description = "Changelings and a wizard spawn during this round." config_tag = "lizard" - required_players = 15 - required_players_secret = 15 - required_enemies = 4 + required_players = 2 + required_players_secret = 8 + required_enemies = 3 end_on_antag_death = 0 antag_tags = list(MODE_WIZARD, MODE_CHANGELING) require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/paranoia.dm b/code/game/gamemodes/mixed/paranoia.dm index 7c3e903b14..cda62701a0 100644 --- a/code/game/gamemodes/mixed/paranoia.dm +++ b/code/game/gamemodes/mixed/paranoia.dm @@ -1,5 +1,5 @@ /datum/game_mode/paranoia - name = "paranoia" + name = "Malf AI, Renegades & Changelings" round_description = "The AI has malfunctioned, and subversive elements infest the crew..." extended_round_description = "Rampant AIs, renegades and changelings spawn in this mode." config_tag = "paranoia" diff --git a/code/game/gamemodes/mixed/traitorling.dm b/code/game/gamemodes/mixed/traitorling.dm index 4eb4b6c77a..1ae93d7d38 100644 --- a/code/game/gamemodes/mixed/traitorling.dm +++ b/code/game/gamemodes/mixed/traitorling.dm @@ -1,5 +1,5 @@ /datum/game_mode/traitorling - name = "traitorling" + name = "Traitors & Changelings" round_description = "There are traitors and alien changelings on the station. Do not let the changelings succeed!" extended_round_description = "Traitors and changelings both spawn during this mode." config_tag = "traitorling" diff --git a/code/game/gamemodes/mixed/uprising.dm b/code/game/gamemodes/mixed/uprising.dm index 005d9dce91..d557cfc075 100644 --- a/code/game/gamemodes/mixed/uprising.dm +++ b/code/game/gamemodes/mixed/uprising.dm @@ -1,5 +1,5 @@ /datum/game_mode/uprising - name = "uprising" + name = "Revolution & Cult" config_tag = "uprising" round_description = "Some crewmembers are attempting to start a revolution while a cult plots in the shadows!" extended_round_description = "Cultists and revolutionaries spawn in this round." diff --git a/code/game/gamemodes/mixed/visitors.dm b/code/game/gamemodes/mixed/visitors.dm index 89099c9878..e9a5919819 100644 --- a/code/game/gamemodes/mixed/visitors.dm +++ b/code/game/gamemodes/mixed/visitors.dm @@ -1,10 +1,10 @@ /datum/game_mode/visitors - name = "Visitors" + name = "Wizard & Ninja" round_description = "A space wizard and a ninja have invaded the station!" extended_round_description = "A ninja and wizard spawn during this round." config_tag = "visitors" - required_players = 10 - required_players_secret = 10 + required_players = 6 + required_players_secret = 6 required_enemies = 2 end_on_antag_death = 0 antag_tags = list(MODE_WIZARD, MODE_NINJA) diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index 40f59026bf..d71412dc8a 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -1,5 +1,5 @@ /datum/game_mode/ninja - name = "ninja" + name = "Ninja" round_description = "An agent of the Spider Clan is onboard the station!" extended_round_description = "What was that?! Was that a person or did your eyes just play tricks on you? \ You have no idea. That slim-suited, cryptic individual is an enigma to you and all of your knowledge. \ diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm index a96c7c7639..a9641dabd2 100644 --- a/code/game/gamemodes/sandbox/sandbox.dm +++ b/code/game/gamemodes/sandbox/sandbox.dm @@ -1,5 +1,5 @@ /datum/game_mode/sandbox - name = "sandbox" + name = "Sandbox" config_tag = "sandbox" required_players = 0 votable = 0 diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 5ac35742b2..5f60ee90f5 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -19,6 +19,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) minimal_player_age = 14 economic_modifier = 20 + minimum_character_age = 25 ideal_character_age = 70 // Old geezer captains ftw @@ -67,6 +68,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) req_admin_notify = 1 minimal_player_age = 10 economic_modifier = 10 + + minimum_character_age = 25 ideal_character_age = 50 access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers, diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 98661a9c4f..48769efa19 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -188,12 +188,13 @@ department = "Civilian" department_flag = CIVILIAN faction = "Station" - total_positions = 1 - spawn_positions = 1 + total_positions = 2 + spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#dddddd" access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels) + alt_titles = list("Custodian") equip(var/mob/living/carbon/human/H) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 20a5c1e5d1..15cae264eb 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -13,6 +13,7 @@ req_admin_notify = 1 economic_modifier = 10 + minimum_character_age = 25 ideal_character_age = 50 diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index cced0b79b3..6bfd8c16cf 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -19,6 +19,7 @@ access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels) + minimum_character_age = 25 minimal_player_age = 10 ideal_character_age = 50 diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index aa391489fc..b892ad228f 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -21,6 +21,7 @@ access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch) + minimum_character_age = 25 minimal_player_age = 14 ideal_character_age = 50 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index cc09386234..ff13bf5cbf 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -20,6 +20,7 @@ access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) + minimum_character_age = 25 minimal_player_age = 14 equip(var/mob/living/carbon/human/H) @@ -92,7 +93,7 @@ spawn_positions = 2 supervisors = "the head of security" selection_color = "#ffeeee" - alt_titles = list("Forensic Technician") + alt_titles = list("Forensic Technician","Investigator") access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) economic_modifier = 5 @@ -119,6 +120,7 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_trench(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/head/det(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit(H), slot_r_hand) return 1 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 7bf949e217..adf5e2ab45 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -111,7 +111,7 @@ var/global/datum/controller/occupations/job_master if(istype(job, GetJob("Assistant"))) // We don't want to give him assistant, that's boring! continue - if(job in command_positions) //If you want a command position, select it! + if(job.title in command_positions) //If you want a command position, select it! continue if(jobban_isbanned(player, job.title)) @@ -331,7 +331,6 @@ var/global/datum/controller/occupations/job_master var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage. var/list/custom_equip_leftovers = list() if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI") - for(var/thing in H.client.prefs.gear) var/datum/gear/G = gear_datums[thing] if(G) @@ -353,10 +352,11 @@ var/global/datum/controller/occupations/job_master if(G.slot && !(G.slot in custom_equip_slots)) // This is a miserable way to fix the loadout overwrite bug, but the alternative requires // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + var/metadata = H.client.prefs.gear[G.display_name] if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) custom_equip_leftovers += thing - else if(H.equip_to_slot_or_del(new G.path(H), G.slot)) - H << "Equipping you with [thing]!" + else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" custom_equip_slots.Add(G.slot) else custom_equip_leftovers.Add(thing) @@ -375,8 +375,9 @@ var/global/datum/controller/occupations/job_master if(G.slot in custom_equip_slots) spawn_in_storage += thing else - if(H.equip_to_slot_or_del(new G.path(H), G.slot)) - H << "Equipping you with [thing]!" + var/metadata = H.client.prefs.gear[G.display_name] + if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" custom_equip_slots.Add(G.slot) else spawn_in_storage += thing @@ -439,9 +440,10 @@ var/global/datum/controller/occupations/job_master if(!isnull(B)) for(var/thing in spawn_in_storage) - H << "Placing [thing] in your [B]!" + H << "Placing \the [thing] in your [B.name]!" var/datum/gear/G = gear_datums[thing] - new G.path(B) + var/metadata = H.client.prefs.gear[G.display_name] + G.spawn_item(B, metadata) else H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug." diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 648df34dc0..cb07d373a8 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -155,8 +155,12 @@ var/A = text2num(href_list["access"]) if (A in accesses) accesses.Remove(A) - else - accesses.Add(A) + else + if(A in giver.access) //Let's make sure the ID card actually has the access. + accesses.Add(A) + else + usr << "Invalid selection, please consult technical support if there are any issues." + log_debug("[key_name_admin(usr)] tried selecting an invalid guest pass terminal option.") if (href_list["action"]) switch(href_list["action"]) if ("id") diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 132f662567..82834df896 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -91,7 +91,7 @@ if(!target || !istype(target)) return - var/istraitor = traitors.is_antagonist(target.mind) + var/istraitor = target.mind.special_role if (istraitor) target.lockcharge = !target.lockcharge if (target.lockcharge) @@ -187,7 +187,7 @@ robot["name"] = R.name if(R.stat) robot["status"] = "Not Responding" - else if (!R.canmove) + else if (R.lockcharge) robot["status"] = "Lockdown" else robot["status"] = "Operational" diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 48fea8a04a..6c4c6160cd 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -63,10 +63,9 @@ return 1 /obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob) - if(user.stat) - return - go_out() - return + // note that relaymove will also be called for mobs outside the cell with UI open + if(src.occupant == user && !user.stat) + go_out() /obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) ui_interact(user) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 57d20ca3c2..f336ad310e 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -219,7 +219,7 @@ var/disallow_occupant_types = list() var/mob/occupant = null // Person waiting to be despawned. - var/time_till_despawn = 18000 // 30 minutes-ish safe period before being despawned. + var/time_till_despawn = 9000 // Down to 15 minutes //30 minutes-ish is too long var/time_entered = 0 // Used to keep track of the safe period. var/obj/item/device/radio/intercom/announce // @@ -487,32 +487,33 @@ if(istype(G, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/grab = G if(occupant) user << "\The [src] is in use." return - if(!ismob(G:affecting)) + if(!ismob(grab.affecting)) return - if(!check_occupant_allowed(G:affecting)) + if(!check_occupant_allowed(grab.affecting)) return var/willing = null //We don't want to allow people to be forced into despawning. - var/mob/M = G:affecting + var/mob/M = grab.affecting if(M.client) if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes") - if(!M || !G || !G:affecting) return + if(!M || !grab || !grab:affecting) return willing = 1 else willing = 1 if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("\The [user] starts putting [grab:affecting:name] into \the [src].", 3) if(do_after(user, 20)) - if(!M || !G || !G:affecting) return + if(!M || !grab || !grab:affecting) return M.forceMove(src) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index cb8b9f5e69..15d2848cd2 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -808,23 +808,23 @@ About the new airlock wires panel: else spawn(0) close(1) - else if(istype(C, /obj/item/weapon/material/twohanded/fireaxe) && !arePowerSystemsOn()) + // Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc). + else if( (istype(C, /obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade) ) && !arePowerSystemsOn()) if(locked) user << "The airlock's bolts prevent it from being forced." else if( !welded && !operating ) + if(istype(C, /obj/item/weapon/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands. + var/obj/item/weapon/material/twohanded/fireaxe/F = C + if(!F.wielded) + user << "You need to be wielding \the [F] to do that." + return + // At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it. if(density) - var/obj/item/weapon/material/twohanded/fireaxe/F = C - if(F.wielded) - spawn(0) open(1) - else - user << "You need to be wielding \the [C] to do that." + spawn(0) + open(1) else - var/obj/item/weapon/material/twohanded/fireaxe/F = C - if(F.wielded) - spawn(0) close(1) - else - user << "You need to be wielding \the [C] to do that." - + spawn(0) + close(1) else ..() return diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 8c960e7bdf..9647befd6e 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -86,11 +86,17 @@ // Proc: attackby() // Parameters: 2 (C - Item this object was clicked with, user - Mob which clicked this object) -// Description: If we are clicked with crowbar or wielded fire axe, try to manually open the door. +// Description: If we are clicked with crowbar, wielded fire axe, or armblade, try to manually open the door. // This only works on broken doors or doors without power. Also allows repair with Plasteel. /obj/machinery/door/blast/attackby(obj/item/weapon/C as obj, mob/user as mob) src.add_fingerprint(user) - if(istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/material/twohanded/fireaxe) && C:wielded == 1)) + if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade)) + if(istype(C,/obj/item/weapon/material/twohanded/fireaxe)) + var/obj/item/weapon/material/twohanded/fireaxe/F = C + if(!F.wielded) + user << "You need to be wielding \the [F] to do that." + return + if(((stat & NOPOWER) || (stat & BROKEN)) && !( src.operating )) force_toggle() else @@ -144,7 +150,7 @@ if(stat & BROKEN) stat &= ~BROKEN - + /obj/machinery/door/blast/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group) return 1 return ..() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 266aeb2f23..b2b619e342 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -235,7 +235,7 @@ user << "\The [src] is welded shut!" return - if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/material/twohanded/fireaxe)) + if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade)) if(operating) return diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 16e8d8e6e7..e4b36b9402 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -18,8 +18,6 @@ var/global/list/acceptable_items // List of the items you can put in var/global/list/acceptable_reagents // List of the reagents you can put in var/global/max_n_of_items = 0 - - var/list/ingredient_list = list() //MUST BE INTIALIZED OR YOU GET RUNTIME ERRORS // see code/modules/food/recipes_microwave.dm for recipes @@ -116,13 +114,12 @@ user << "It's dirty!" return 1 else if(is_type_in_list(O,acceptable_items)) - if (ingredient_list.len>=max_n_of_items) + if (contents.len>=(max_n_of_items + component_parts.len)) //Adds component_parts to the maximum number of items. user << "This [src] is full of ingredients, you cannot put more." return 1 if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it var/obj/item/stack/S = O - var/obj/item/stack/K = new O.type (src) //Needed for change into ingredient lists, rather than just contents. - ingredient_list += K + new O.type (src) S.use(1) user.visible_message( \ "\The [user] has added one of [O] to \the [src].", \ @@ -132,7 +129,6 @@ // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete user.drop_item() O.loc = src - ingredient_list += O user.visible_message( \ "\The [user] has added \the [O] to \the [src].", \ "You add \the [O] to \the [src].") @@ -181,7 +177,7 @@ var/list/items_counts = new var/list/items_measures = new var/list/items_measures_p = new - for (var/obj/O in ingredient_list) + for (var/obj/O in (contents-component_parts)) var/display_name = O.name if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) items_measures[display_name] = "egg" @@ -241,7 +237,7 @@ if(stat & (NOPOWER|BROKEN)) return start() - if (reagents.total_volume==0 && !(locate(/obj) in ingredient_list)) //dry run + if (reagents.total_volume==0 && !(locate(/obj) in (contents-component_parts))) //dry run if (!wzhzhzh(10)) abort() return @@ -303,7 +299,7 @@ return 1 /obj/machinery/microwave/proc/has_extra_item() - for (var/obj/O in ingredient_list) + for (var/obj/O in (contents-component_parts)) if ( \ !istype(O,/obj/item/weapon/reagent_containers/food) && \ !istype(O, /obj/item/weapon/grown) \ @@ -329,9 +325,8 @@ src.updateUsrDialog() /obj/machinery/microwave/proc/dispose() - for (var/obj/O in ingredient_list) + for (var/obj/O in (contents-component_parts)) O.loc = src.loc - ingredient_list -= O if (src.reagents.total_volume) src.dirty++ src.reagents.clear_reagents() @@ -365,7 +360,7 @@ /obj/machinery/microwave/proc/fail() var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) var/amount = 0 - for (var/obj/O in ingredient_list-ffuu) + for (var/obj/O in (contents-ffuu)-component_parts) amount++ if (O.reagents) var/id = O.reagents.get_master_reagent_id() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4b6b437900..b7b258f5d6 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -21,6 +21,8 @@ return /obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(W.attack_verb.len) visible_message("\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") else diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f66b668664..2934e5d68d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -10,6 +10,7 @@ var/burn_point = null var/burning = null var/hitsound = null + var/storage_cost = null var/slot_flags = 0 //This is used to determine on which slots an item can fit. var/no_attack_log = 0 //If it's an item we don't want to log attack_logs with, set this to 1 pass_flags = PASSTABLE @@ -358,7 +359,7 @@ var/list/global/slot_flags_enumeration = list( var/allow = 0 if(H.back && istype(H.back, /obj/item/weapon/storage/backpack)) var/obj/item/weapon/storage/backpack/B = H.back - if(B.contents.len < B.storage_slots && w_class <= B.max_w_class) + if(B.can_be_inserted(src,1)) allow = 1 if(!allow) return 0 diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 24a2db67d7..5d576959fb 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -354,12 +354,12 @@ var/muleData[0] muleData["name"] = M.suffix muleData["location"] = get_area(M) - muleData["mode"] = M.mode + muleData["paused"] = M.paused muleData["home"] = M.homeName muleData["target"] = M.targetName muleData["ref"] = "\ref[M]" muleData["load"] = M.load ? M.load.name : "Nothing" - + mulebotsData[++mulebotsData.len] = muleData.Copy() values["mulebotcount"] = count diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 2906cb756d..3cc011cfb8 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -43,13 +43,30 @@ var/global/list/obj/item/device/communicator/all_communicators = list() node = get_exonet_node() processing_objects |= src //This is a pretty terrible way of doing this. - spawn(50) //Wait for our mob to finish spawning. + spawn(5 SECONDS) //Wait for our mob to finish spawning. if(ismob(loc)) register_device(loc) + initialize_exonet(loc) else if(istype(loc, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = loc if(ismob(S.loc)) register_device(S.loc) + initialize_exonet(S.loc) + +// Proc: initialize_exonet() +// Parameters: 1 (user - the person the communicator belongs to) +// Description: Sets up the exonet datum, gives the device an address, and then gets a node reference. Afterwards, populates the device +// list. +/obj/item/device/communicator/proc/initialize_exonet(mob/user) + if(!user || !istype(user, /mob/living)) + return + if(!exonet) + exonet = new(src) + if(!exonet.address) + exonet.make_address("communicator-[user.client]-[user.name]") + if(!node) + node = get_exonet_node() + populate_known_devices() // Proc: examine() // Parameters: 1 (user - the person examining the device) @@ -139,13 +156,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Description: Makes an exonet datum if one does not exist, allocates an address for it, maintains the lists of all devies, clears the alert icon, and // finally makes NanoUI appear. /obj/item/device/communicator/attack_self(mob/user) - if(!exonet) - exonet = new(src) - if(!exonet.address) - exonet.make_address("communicator-[user.client]-[user.name]") - if(!node) - node = get_exonet_node() - populate_known_devices() + initialize_exonet(user) alert_called = 0 update_icon() ui_interact(user) @@ -292,7 +303,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() return var/their_address = href_list["dial"] exonet.send_message(their_address, "voice") - + if(href_list["disconnect"]) var/name_to_disconnect = href_list["disconnect"] for(var/mob/living/voice/V in contents) @@ -304,13 +315,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(href_list["copy"]) target_address = href_list["copy"] - + if(href_list["hang_up"]) for(var/mob/living/voice/V in contents) close_connection(usr, V, "[usr] hung up.") for(var/obj/item/device/communicator/comm in communicating) close_connection(usr, comm, "[usr] hung up.") - + if(href_list["switch_tab"]) selected_tab = href_list["switch_tab"] diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index b404b69f0b..52b949cf35 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -68,6 +68,12 @@ /obj/item/weapon/material/twohanded/update_icon() icon_state = "[base_icon][wielded]" item_state = icon_state + +/obj/item/weapon/material/twohanded/dropped() + ..() + if(wielded) + spawn(0) + update_held_icon() /* * Fireaxe diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 11d4c4b974..8509172581 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -22,7 +22,7 @@ ) w_class = 4 slot_flags = SLOT_BACK - max_w_class = 3 + max_w_class = 4 max_storage_space = 28 /obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -53,6 +53,7 @@ icon_state = "holdingpack" max_w_class = 4 max_storage_space = 56 + storage_cost = 29 New() ..() @@ -77,7 +78,6 @@ icon_state = "giftbag0" item_state = "giftbag" w_class = 4.0 - storage_slots = 20 max_w_class = 3 max_storage_space = 400 // can store a ton of shit! item_state_slots = null @@ -142,57 +142,84 @@ desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles." icon_state = "chempack" +/* + * Duffle Types + */ + /obj/item/weapon/storage/backpack/dufflebag name = "dufflebag" desc = "A large dufflebag for holding extra things." icon_state = "duffle" - item_state = "duffle" + item_state_slots = list( + slot_l_hand_str = "duffle", + slot_r_hand_str = "duffle", + ) slowdown = 1 - max_storage_space = 38 - storage_slots = 12 + max_storage_space = 36 /obj/item/weapon/storage/backpack/dufflebag/syndie name = "black dufflebag" desc = "A large dufflebag for holding extra tactical supplies." icon_state = "duffle_syndie" - item_state = "duffle_syndiemed" + item_state_slots = list( + slot_l_hand_str = "duffle_syndiemed", + slot_r_hand_str = "duffle_syndiemed", + ) slowdown = 0 /obj/item/weapon/storage/backpack/dufflebag/syndie/med name = "medical dufflebag" desc = "A large dufflebag for holding extra tactical medical supplies." icon_state = "duffle_syndiemed" - item_state = "duffle_syndiemed" + item_state_slots = list( + slot_l_hand_str = "duffle_syndiemed", + slot_r_hand_str = "duffle_syndiemed", + ) /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo name = "ammunition dufflebag" desc = "A large dufflebag for holding extra weapons ammunition and supplies." icon_state = "duffle_syndieammo" - item_state = "duffle_syndieammo" + item_state_slots = list( + slot_l_hand_str = "duffle_syndieammo", + slot_r_hand_str = "duffle_syndieammo", + ) /obj/item/weapon/storage/backpack/dufflebag/captain name = "captain's dufflebag" desc = "A large dufflebag for holding extra captainly goods." icon_state = "duffle_captain" - item_state = "duffle_captain" + item_state_slots = list( + slot_l_hand_str = "duffle_captain", + slot_r_hand_str = "duffle_captain", + ) /obj/item/weapon/storage/backpack/dufflebag/med name = "medical dufflebag" desc = "A large dufflebag for holding extra medical supplies." icon_state = "duffle_med" - item_state = "duffle_med" + item_state_slots = list( + slot_l_hand_str = "duffle_med", + slot_r_hand_str = "duffle_med", + ) /obj/item/weapon/storage/backpack/dufflebag/sec name = "security dufflebag" desc = "A large dufflebag for holding extra security supplies and ammunition." icon_state = "duffle_sec" - item_state = "duffle_sec" + item_state_slots = list( + slot_l_hand_str = "duffle_sec", + slot_r_hand_str = "duffle_sec", + ) /obj/item/weapon/storage/backpack/dufflebag/eng name = "industrial dufflebag" desc = "A large dufflebag for holding extra tools and supplies." icon_state = "duffle_eng" - item_state = "duffle_eng" + item_state_slots = list( + slot_l_hand_str = "duffle_eng", + slot_r_hand_str = "duffle_eng", + ) /* * Satchel Types diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 33fa1d6d7e..476bf1a67e 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -34,7 +34,6 @@ w_class = 4 max_w_class = 2 - storage_slots = 21 can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -61,7 +60,6 @@ w_class = 4 max_w_class = 2 - storage_slots = 21 can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -76,8 +74,7 @@ icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET w_class = 3 - storage_slots = 50 - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class + max_storage_space = 100 max_w_class = 3 can_hold = list(/obj/item/weapon/ore) @@ -90,8 +87,7 @@ name = "plant bag" icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "plantbag" - storage_slots = 50; //the number of plant pieces it can carry. - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class + max_storage_space = 100 max_w_class = 3 w_class = 2 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) @@ -111,6 +107,7 @@ var/capacity = 300; //the number of sheets it can carry. w_class = 3 + storage_slots = 7 allow_quick_empty = 1 // this function is superceded New() @@ -193,7 +190,7 @@ var/col_count = min(7,storage_slots) -1 if (adjusted_contents > 7) row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.standard_orient_objs(row_num, col_count, numbered_contents) + src.slot_orient_objs(row_num, col_count, numbered_contents) return @@ -248,8 +245,7 @@ icon = 'icons/obj/storage.dmi' icon_state = "cashbag" desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." - storage_slots = 50; //the number of cash pieces it can carry. - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class + max_storage_space = 100 max_w_class = 3 w_class = 2 can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 6f93f03df2..478272b8b2 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -4,6 +4,9 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "utilitybelt" item_state = "utility" + storage_slots = 7 + max_storage_space = 28 //This should ensure belts always have enough room to store whatever. + max_w_class = 3 slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/belt.dmi') @@ -121,9 +124,7 @@ desc = "Can hold security gear like handcuffs and flashes." icon_state = "securitybelt" item_state = "security" - storage_slots = 7 max_w_class = 3 - max_storage_space = 28 can_hold = list( /obj/item/weapon/grenade, /obj/item/weapon/reagent_containers/spray/pepper, @@ -180,7 +181,13 @@ /obj/item/device/megaphone, /obj/item/device/radio/headset, /obj/item/clothing/gloves, - /obj/item/taperoll/police + /obj/item/taperoll/police, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/handcuffs, + /obj/item/device/flash, + /obj/item/weapon/flame/lighter, + /obj/item/weapon/reagent_containers/food/snacks/donut/, + /obj/item/ammo_magazine ) /obj/item/weapon/storage/belt/soulstone @@ -227,3 +234,27 @@ desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." icon_state = "bandolier" item_state = "bandolier" + +/obj/item/weapon/storage/belt/janitor + name = "janitorial belt" + desc = "A belt used to hold most janitorial supplies." + icon_state = "janibelt" + item_state = "janibelt" + storage_slots = 7 + max_w_class = 3 + can_hold = list( + /obj/item/clothing/glasses, + /obj/item/device/flashlight, + /obj/item/weapon/grenade, + /obj/item/device/pda, + /obj/item/device/radio/headset, + /obj/item/clothing/gloves, + /obj/item/clothing/mask/surgical, //sterile mask, + /obj/item/device/assembly/mousetrap, + /obj/item/weapon/light/bulb, + /obj/item/weapon/light/tube, + /obj/item/weapon/flame/lighter, + /obj/item/device/megaphone, + /obj/item/weapon/reagent_containers/spray, + /obj/item/weapon/soap + ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 62a9117de1..657d2f4f5a 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -25,6 +25,7 @@ icon_state = "box" item_state = "syringe_kit" var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard + max_w_class = 2 // BubbleWrap - A box can be folded up to make card /obj/item/weapon/storage/box/attack_self(mob/user as mob) @@ -498,12 +499,11 @@ desc = "Drymate brand monkey cubes. Just add water!" icon = 'icons/obj/food.dmi' icon_state = "monkeycubebox" - storage_slots = 7 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube) New() ..() if(src.type == /obj/item/weapon/storage/box/monkeycubes) - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) /obj/item/weapon/storage/box/monkeycubes/farwacubes @@ -511,7 +511,7 @@ desc = "Drymate brand farwa cubes, shipped from Ahdomai. Just add water!" New() ..() - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src) /obj/item/weapon/storage/box/monkeycubes/stokcubes @@ -519,7 +519,7 @@ desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!" New() ..() - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src) /obj/item/weapon/storage/box/monkeycubes/neaeracubes @@ -527,7 +527,7 @@ desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" New() ..() - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src) /obj/item/weapon/storage/box/ids @@ -612,11 +612,10 @@ desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." icon = 'icons/obj/toy.dmi' icon_state = "spbox" - storage_slots = 8 can_hold = list(/obj/item/toy/snappop) New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i = 1 to 8) new /obj/item/toy/snappop(src) /obj/item/weapon/storage/box/matches @@ -625,14 +624,13 @@ icon = 'icons/obj/cigarettes.dmi' icon_state = "matchbox" item_state = "zippo" - storage_slots = 10 w_class = 1 slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/flame/match) New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to 10) new /obj/item/weapon/flame/match(src) attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob) @@ -650,7 +648,7 @@ icon_state = "syringe" New() ..() - for (var/i; i < storage_slots; i++) + for (var/i = 1 to 7) new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) /obj/item/weapon/storage/box/lights @@ -696,7 +694,6 @@ icon_state = "portafreezer" item_state = "medicalpack" foldable = null - storage_slots=7 max_w_class = 3 can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass) max_storage_space = 21 diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 1af88c9fa8..758ac8dc39 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -53,7 +53,7 @@ /obj/item/weapon/storage/fancy/egg_box/New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to storage_slots) new /obj/item/weapon/reagent_containers/food/snacks/egg(src) return @@ -68,14 +68,13 @@ icon_state = "candlebox5" icon_type = "candle" item_state = "candlebox5" - storage_slots = 5 throwforce = 2 slot_flags = SLOT_BELT /obj/item/weapon/storage/fancy/candle_box/New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to 5) new /obj/item/weapon/flame/candle(src) return @@ -89,7 +88,6 @@ icon = 'icons/obj/crayons.dmi' icon_state = "crayonbox" w_class = 2.0 - storage_slots = 6 icon_type = "crayon" can_hold = list( /obj/item/weapon/pen/crayon @@ -144,27 +142,42 @@ for(var/i = 1 to storage_slots) new /obj/item/clothing/mask/smokable/cigarette(src) create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one + flags |= OPENCONTAINER /obj/item/weapon/storage/fancy/cigarettes/update_icon() icon_state = "[initial(icon_state)][contents.len]" return /obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location) + // Don't try to transfer reagents to lighters + if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) var/obj/item/clothing/mask/smokable/cigarette/C = W - if(!istype(C)) return // what reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() + ..() /obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) return - if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask) - var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user) - reagents.trans_to_obj(W, (reagents.total_volume/contents.len)) - user.equip_to_slot_if_possible(W, slot_wear_mask) + if(M == user && user.zone_sel.selecting == O_MOUTH) + // Find ourselves a cig. Note that we could be full of lighters. + var/obj/item/clothing/mask/smokable/cigarette/cig = locate() in src + + if(cig == null) + user << "Looks like the packet is out of cigarettes." + return + + // Instead of running equip_to_slot_if_possible() we check here first, + // to avoid dousing cig with reagents if we're not going to equip it + if(!cig.mob_can_equip(user, slot_wear_mask)) + return + + // We call remove_from_storage first to manage the reagent transfer and + // UI updates. + remove_from_storage(cig, null) + user.equip_to_slot(cig, slot_wear_mask) + reagents.maximum_volume = 15 * contents.len - contents.len-- user << "You take a cigarette out of the pack." update_icon() else @@ -248,21 +261,6 @@ reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) ..() -/obj/item/weapon/storage/fancy/cigar/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask) - var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user) - reagents.trans_to_obj(W, (reagents.total_volume/contents.len)) - user.equip_to_slot_if_possible(W, slot_wear_mask) - reagents.maximum_volume = 15 * contents.len - contents.len-- - user << "You take a cigar out of the case." - update_icon() - else - ..() - /* * Vial Box */ @@ -278,7 +276,7 @@ /obj/item/weapon/storage/fancy/vials/New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to 6) new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) return diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index dad95da904..9b9918d92f 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -162,7 +162,6 @@ can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) allow_quick_gather = 1 use_to_pickup = 1 - storage_slots = 14 use_sound = null /obj/item/weapon/storage/pill_bottle/antitox diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 33d462eff2..e8f09a0ab3 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -8,7 +8,6 @@ w_class = 4 max_w_class = 3 max_storage_space = 14 //The sum of the w_classes of all the items in this storage item. - storage_slots = 4 req_access = list(access_armory) var/locked = 1 var/broken = 0 diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index eb63c96cb8..8d954d5306 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -15,14 +15,13 @@ icon = 'icons/obj/food.dmi' icon_state = "donutbox" name = "donut box" - storage_slots = 6 var/startswith = 6 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard /obj/item/weapon/storage/box/donut/New() ..() - for(var/i=1; i <= startswith; i++) + for(var/i=1 to startswith) new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src) update_icon() return diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 3cb92b0a3c..7dcc429d27 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -15,9 +15,15 @@ var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = 14 //The sum of the storage costs of all the items in this storage item. - var/storage_slots = 7 //The number of storage slots in this container. + var/max_storage_space = 8 //The sum of the storage costs of all the items in this storage item. + var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. var/obj/screen/storage/boxes = null + var/obj/screen/storage/storage_start = null //storage UI + var/obj/screen/storage/storage_continue = null + var/obj/screen/storage/storage_end = null + var/obj/screen/storage/stored_start = null + var/obj/screen/storage/stored_continue = null + var/obj/screen/storage/stored_end = null var/obj/screen/close/closer = null var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. @@ -29,6 +35,12 @@ /obj/item/weapon/storage/Destroy() close_all() qdel(boxes) + qdel(src.storage_start) + qdel(src.storage_continue) + qdel(src.storage_end) + qdel(src.stored_start) + qdel(src.stored_continue) + qdel(src.stored_end) qdel(closer) ..() @@ -92,11 +104,19 @@ if(user.s_active) user.s_active.hide_from(user) user.client.screen -= src.boxes + user.client.screen -= src.storage_start + user.client.screen -= src.storage_continue + user.client.screen -= src.storage_end user.client.screen -= src.closer user.client.screen -= src.contents - user.client.screen += src.boxes user.client.screen += src.closer user.client.screen += src.contents + if(storage_slots) + user.client.screen += src.boxes + else + user.client.screen += src.storage_start + user.client.screen += src.storage_continue + user.client.screen += src.storage_end user.s_active = src is_seeing |= user return @@ -106,6 +126,9 @@ if(!user.client) return user.client.screen -= src.boxes + user.client.screen -= src.storage_start + user.client.screen -= src.storage_continue + user.client.screen -= src.storage_end user.client.screen -= src.closer user.client.screen -= src.contents if(user.s_active == src) @@ -157,7 +180,7 @@ return //This proc draws out the inventory and places the items on it. It uses the standard position. -/obj/item/weapon/storage/proc/standard_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) +/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) var/cx = 4 var/cy = 2+rows src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" @@ -183,6 +206,52 @@ src.closer.screen_loc = "[4+cols+1]:16,2:16" return +/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) + + var/baseline_max_storage_space = 16 //should be equal to default backpack capacity + var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space + var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item + var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space + + storage_start.overlays.Cut() + + var/matrix/M = matrix() + M.Scale((storage_width-storage_cap_width*2+3)/32,1) + src.storage_continue.transform = M + + src.storage_start.screen_loc = "4:16,2:16" + src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" + src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" + + var/startpoint = 0 + var/endpoint = 1 + + for(var/obj/item/O in contents) + startpoint = endpoint + 1 + endpoint += storage_width * O.get_storage_cost()/max_storage_space + + var/matrix/M_start = matrix() + var/matrix/M_continue = matrix() + var/matrix/M_end = matrix() + M_start.Translate(startpoint,0) + M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1) + M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0) + M_end.Translate(endpoint-stored_cap_width,0) + src.stored_start.transform = M_start + src.stored_continue.transform = M_continue + src.stored_end.transform = M_end + storage_start.overlays += src.stored_start + storage_start.overlays += src.stored_continue + storage_start.overlays += src.stored_end + + O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" + O.maptext = "" + O.layer = 20 + + src.closer.screen_loc = "4:[storage_width+19],2:16" + return + + /datum/numbered_display var/obj/item/sample_object var/number @@ -214,12 +283,14 @@ adjusted_contents++ numbered_contents.Add( new/datum/numbered_display(I) ) - //var/mob/living/carbon/human/H = user - var/row_num = 0 - var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.standard_orient_objs(row_num, col_count, numbered_contents) + if(storage_slots == null) + src.space_orient_objs(numbered_contents) + else + var/row_num = 0 + var/col_count = min(7,storage_slots) -1 + if (adjusted_contents > 7) + row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. + src.slot_orient_objs(row_num, col_count, numbered_contents) return //This proc return 1 if the item can be picked up and 0 if it can't. @@ -227,12 +298,12 @@ /obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) if(!istype(W)) return //Not an item - if(usr.isEquipped(W) && !usr.canUnEquip(W)) + if(usr && usr.isEquipped(W) && !usr.canUnEquip(W)) return 0 if(src.loc == W) return 0 //Means the item is already in the storage item - if(contents.len >= storage_slots) + if(storage_slots != null && contents.len >= storage_slots) if(!stop_messages) usr << "[src] is full, make some space." return 0 //Storage item is full @@ -249,9 +320,9 @@ usr << "[src] cannot hold [W]." return 0 - if (W.w_class > max_w_class) + if (max_w_class != null && W.w_class > max_w_class) if(!stop_messages) - usr << "[W] is too big for this [src]." + usr << "[W] is too long for \the [src]." return 0 var/total_storage_space = W.get_storage_cost() @@ -260,7 +331,7 @@ if(total_storage_space > max_storage_space) if(!stop_messages) - usr << "[src] is full, make some space." + usr << "[src] is too full, make some space." return 0 if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) @@ -437,15 +508,51 @@ else verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode + spawn(5) + var/total_storage_space = 0 + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() + max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents + src.boxes = new /obj/screen/storage( ) src.boxes.name = "storage" src.boxes.master = src src.boxes.icon_state = "block" src.boxes.screen_loc = "7,7 to 10,8" src.boxes.layer = 19 + + src.storage_start = new /obj/screen/storage( ) + src.storage_start.name = "storage" + src.storage_start.master = src + src.storage_start.icon_state = "storage_start" + src.storage_start.screen_loc = "7,7 to 10,8" + src.storage_start.layer = 19 + src.storage_continue = new /obj/screen/storage( ) + src.storage_continue.name = "storage" + src.storage_continue.master = src + src.storage_continue.icon_state = "storage_continue" + src.storage_continue.screen_loc = "7,7 to 10,8" + src.storage_continue.layer = 19 + src.storage_end = new /obj/screen/storage( ) + src.storage_end.name = "storage" + src.storage_end.master = src + src.storage_end.icon_state = "storage_end" + src.storage_end.screen_loc = "7,7 to 10,8" + src.storage_end.layer = 19 + + src.stored_start = new /obj //we just need these to hold the icon + src.stored_start.icon_state = "stored_start" + src.stored_start.layer = 19 + src.stored_continue = new /obj + src.stored_continue.icon_state = "stored_continue" + src.stored_continue.layer = 19 + src.stored_end = new /obj + src.stored_end.icon_state = "stored_end" + src.stored_end.layer = 19 + src.closer = new /obj/screen/close( ) src.closer.master = src - src.closer.icon_state = "x" + src.closer.icon_state = "storage_close" src.closer.layer = 20 orient2hud() return @@ -500,4 +607,19 @@ return depth /obj/item/proc/get_storage_cost() - return 2**(w_class-1) //1,2,4,8,16,... + if (storage_cost) + return storage_cost + else + switch(w_class) + if(1) + return 1 + if(2) + return 2 + if(3) + return 4 + if(4) + return 8 + if(5) + return 16 + else + return 1000 diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index d47f278e84..8c6365d6fd 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -11,7 +11,7 @@ throw_range = 7 w_class = 4 max_w_class = 3 - max_storage_space = 14 //can hold 7 w_class-2 items or up to 3 w_class-3 items (with 1 w_class-2 item as change). + max_storage_space = 14 //enough to hold all starting contents origin_tech = list(TECH_COMBAT = 1) attack_verb = list("robusted") @@ -20,48 +20,47 @@ icon_state = "red" item_state = "toolbox_red" - New() - ..() - new /obj/item/weapon/crowbar/red(src) - new /obj/item/weapon/extinguisher/mini(src) - if(prob(50)) - new /obj/item/device/flashlight(src) - else - new /obj/item/device/flashlight/flare(src) - new /obj/item/device/radio(src) +/obj/item/weapon/storage/toolbox/emergency/New() + ..() + new /obj/item/weapon/crowbar/red(src) + new /obj/item/weapon/extinguisher/mini(src) + if(prob(50)) + new /obj/item/device/flashlight(src) + else + new /obj/item/device/flashlight/flare(src) + new /obj/item/device/radio(src) /obj/item/weapon/storage/toolbox/mechanical name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" - New() - ..() - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/device/analyzer(src) - new /obj/item/weapon/wirecutters(src) +/obj/item/weapon/storage/toolbox/mechanical/New() + ..() + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/device/analyzer(src) + new /obj/item/weapon/wirecutters(src) /obj/item/weapon/storage/toolbox/electrical name = "electrical toolbox" icon_state = "yellow" item_state = "toolbox_yellow" - New() - ..() - var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/t_scanner(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/stack/cable_coil(src,30,color) - new /obj/item/stack/cable_coil(src,30,color) - if(prob(5)) - new /obj/item/clothing/gloves/yellow(src) - else - new /obj/item/stack/cable_coil(src,30,color) +/obj/item/weapon/storage/toolbox/electrical/New() + ..() + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/t_scanner(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/stack/cable_coil/random(src,30) + new /obj/item/stack/cable_coil/random(src,30) + if(prob(5)) + new /obj/item/clothing/gloves/yellow(src) + else + new /obj/item/stack/cable_coil/random(src,30) /obj/item/weapon/storage/toolbox/syndicate name = "black and red toolbox" @@ -70,13 +69,104 @@ origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) force = 7.0 - New() - ..() - var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/stack/cable_coil(src,30,color) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/multitool(src) +/obj/item/weapon/storage/toolbox/syndicate/New() + ..() + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/multitool(src) + +/obj/item/weapon/storage/toolbox/lunchbox + max_storage_space = 8 //slightly smaller than a toolbox + name = "rainbow lunchbox" + icon_state = "lunchbox_rainbow" + item_state = "toolbox_pink" + desc = "A little lunchbox. This one is the colors of the rainbow!" + w_class = 3 + max_w_class = 2 + var/filled = FALSE + attack_verb = list("lunched") + +/obj/item/weapon/storage/toolbox/lunchbox/New() + ..() + if(filled) + var/list/lunches = lunchables_lunches() + var/lunch = lunches[pick(lunches)] + new lunch(src) + + var/list/snacks = lunchables_snacks() + var/snack = snacks[pick(snacks)] + new snack(src) + + var/list/drinks = lunchables_drinks() + var/drink = drinks[pick(drinks)] + new drink(src) + +/obj/item/weapon/storage/toolbox/lunchbox/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/heart + name = "heart lunchbox" + icon_state = "lunchbox_lovelyhearts" + item_state = "toolbox_pink" + desc = "A little lunchbox. This one has cute little hearts on it!" + +/obj/item/weapon/storage/toolbox/lunchbox/heart/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cat + name = "cat lunchbox" + icon_state = "lunchbox_sciencecatshow" + item_state = "toolbox_green" + desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!" + +/obj/item/weapon/storage/toolbox/lunchbox/cat/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nt + name = "Nanotrasen brand lunchbox" + icon_state = "lunchbox_nanotrasen" + item_state = "toolbox_blue" + desc = "A little lunchbox. This one is branded with the Nanotrasen logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/nt/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/mars + name = "\improper Mars university lunchbox" + icon_state = "lunchbox_marsuniversity" + item_state = "toolbox_red" + desc = "A little lunchbox. This one is branded with the Mars university logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/mars/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cti + name = "\improper CTI lunchbox" + icon_state = "lunchbox_cti" + item_state = "toolbox_blue" + desc = "A little lunchbox. This one is branded with the CTI logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/cti/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nymph + name = "\improper Diona nymph lunchbox" + icon_state = "lunchbox_dionanymph" + item_state = "toolbox_yellow" + desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" + +/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate + name = "black and red lunchbox" + icon_state = "lunchbox_syndie" + item_state = "toolbox_syndi" + desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!" + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled + filled = TRUE diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 4f80e85a52..4e427c8f6e 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -127,7 +127,6 @@ /obj/item/weapon/storage/box/syndie_kit/chameleon name = "chameleon kit" desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." - storage_slots = 10 /obj/item/weapon/storage/box/syndie_kit/chameleon/New() ..() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 68c774c91f..2712d6de79 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -102,7 +102,7 @@ usr.visible_message("[user] starts climbing onto \the [src]!") climbers |= user - if(!do_after(user,(issmall(user) ? 30 : 50))) + if(!do_after(user,(issmall(user) ? 20 : 34))) climbers -= user return diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index d475d094c6..ff15bb0a6c 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -79,6 +79,7 @@ new /obj/item/weapon/caution(src) new /obj/item/device/lightreplacer(src) new /obj/item/weapon/storage/bag/trash(src) + new /obj/item/weapon/storage/belt/janitor(src) new /obj/item/clothing/shoes/galoshes(src) /* diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index bfcbbe5f4c..1b4b27b196 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -48,7 +48,13 @@ /obj/structure/closet/l3closet/janitor/New() ..() new /obj/item/clothing/suit/bio_suit/janitor(src) + new /obj/item/clothing/suit/bio_suit/janitor(src) new /obj/item/clothing/head/bio_hood/janitor(src) + new /obj/item/clothing/head/bio_hood/janitor(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) /obj/structure/closet/l3closet/scientist diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 4fbb4aaae1..cec9b89855 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -17,10 +17,7 @@ new /obj/item/weapon/storage/backpack/satchel_eng(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag/eng(src) - if (prob(70)) - new /obj/item/clothing/accessory/storage/brown_vest(src) - else - new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/blueprints(src) new /obj/item/clothing/under/rank/chief_engineer(src) new /obj/item/clothing/under/rank/chief_engineer/skirt(src) @@ -38,6 +35,7 @@ new /obj/item/device/flash(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) return @@ -118,10 +116,7 @@ new /obj/item/weapon/storage/backpack/satchel_eng(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag/eng(src) - if (prob(70)) - new /obj/item/clothing/accessory/storage/brown_vest(src) - else - new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/weapon/storage/toolbox/mechanical(src) new /obj/item/device/radio/headset/headset_eng(src) new /obj/item/device/radio/headset/headset_eng/alt(src) @@ -131,7 +126,11 @@ new /obj/item/weapon/cartridge/engineering(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) return + + + /obj/structure/closet/secure_closet/atmos_personal name = "technician's locker" req_access = list(access_atmospherics) @@ -151,10 +150,7 @@ new /obj/item/weapon/storage/backpack/satchel_eng(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag/eng(src) - if (prob(70)) - new /obj/item/clothing/accessory/storage/brown_vest(src) - else - new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/device/flashlight(src) new /obj/item/weapon/extinguisher(src) @@ -165,4 +161,5 @@ new /obj/item/weapon/cartridge/atmos(src) new /obj/item/taperoll/atmos(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 105c7cb660..b424c65be5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -70,7 +70,7 @@ new /obj/item/weapon/storage/backpack/dufflebag/med(src) new /obj/item/clothing/under/rank/nursesuit (src) new /obj/item/clothing/head/nursehat (src) - switch(pick("blue", "green", "purple", "black")) + switch(pick("blue", "green", "purple", "black", "navyblue")) if ("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) @@ -83,7 +83,10 @@ if ("black") new /obj/item/clothing/under/rank/medical/black(src) new /obj/item/clothing/head/surgery/black(src) - switch(pick("blue", "green", "purple", "black")) + if ("navyblue") + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) + switch(pick("blue", "green", "purple", "black", "navyblue")) if ("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) @@ -96,6 +99,9 @@ if ("black") new /obj/item/clothing/under/rank/medical/black(src) new /obj/item/clothing/head/surgery/black(src) + if ("navyblue") + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/under/rank/nurse(src) new /obj/item/clothing/under/rank/orderly(src) @@ -144,7 +150,7 @@ new /obj/item/weapon/crowbar(src) new /obj/item/weapon/extinguisher/mini(src) new /obj/item/weapon/storage/box/freezer(src) - new /obj/item/clothing/accessory/storage/brown_vest(src) + new /obj/item/clothing/accessory/storage/white_vest(src) return /obj/structure/closet/secure_closet/CMO @@ -168,7 +174,7 @@ new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) new /obj/item/clothing/shoes/white(src) - switch(pick("blue", "green", "purple", "black")) + switch(pick("blue", "green", "purple", "black", "navyblue")) if ("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) @@ -181,6 +187,9 @@ if ("black") new /obj/item/clothing/under/rank/medical/black(src) new /obj/item/clothing/head/surgery/black(src) + if ("navyblue") + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/under/rank/chief_medical_officer(src) new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src) new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 1766a927fd..5a692dc1c4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -10,31 +10,16 @@ New() ..() - if(prob(50)) - new /obj/item/weapon/storage/backpack/captain(src) - else - new /obj/item/weapon/storage/backpack/satchel_cap(src) - if(prob(50)) - new /obj/item/weapon/storage/backpack/dufflebag/captain(src) - new /obj/item/clothing/suit/captunic(src) - new /obj/item/clothing/suit/captunic/capjacket(src) - new /obj/item/clothing/head/caphat/cap(src) - new /obj/item/clothing/under/rank/captain(src) + new /obj/item/weapon/storage/backpack/dufflebag/captain(src) new /obj/item/clothing/suit/storage/vest(src) new /obj/item/weapon/cartridge/captain(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/weapon/storage/lockbox/medal(src) - new /obj/item/clothing/shoes/brown(src) new /obj/item/device/radio/headset/heads/captain(src) new /obj/item/device/radio/headset/heads/captain/alt(src) - new /obj/item/clothing/gloves/captain(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/clothing/suit/armor/captain(src) new /obj/item/weapon/melee/telebaton(src) - new /obj/item/clothing/under/dress/dress_cap(src) - new /obj/item/clothing/head/caphat/formal(src) - new /obj/item/clothing/under/captainformal(src) - new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src) return @@ -51,7 +36,6 @@ New() ..() - new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/suit/storage/vest(src) new /obj/item/clothing/head/helmet(src) new /obj/item/weapon/cartridge/hop(src) @@ -89,6 +73,8 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src) new /obj/item/clothing/head/caphat/hop(src) + new /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit(src) + new /obj/item/clothing/glasses/sunglasses(src) return @@ -273,20 +259,8 @@ New() ..() - new /obj/item/clothing/under/det(src) - new /obj/item/clothing/under/det/grey(src) - new /obj/item/clothing/under/det/black(src) - new /obj/item/clothing/under/det/waistcoat(src) - new /obj/item/clothing/under/det/grey/waistcoat(src) - new /obj/item/clothing/suit/storage/det_trench(src) - new /obj/item/clothing/suit/storage/det_trench/grey(src) - new /obj/item/clothing/suit/storage/forensics/blue(src) - new /obj/item/clothing/suit/storage/forensics/red(src) new /obj/item/clothing/accessory/badge/holo/detective(src) new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/head/det(src) - new /obj/item/clothing/head/det/grey(src) - new /obj/item/clothing/shoes/laceup(src) new /obj/item/weapon/storage/belt/detective(src) new /obj/item/weapon/storage/box/evidence(src) new /obj/item/device/radio/headset/headset_sec(src) @@ -299,6 +273,7 @@ new /obj/item/clothing/accessory/holster/armpit(src) new /obj/item/device/flashlight/maglight(src) new /obj/item/weapon/reagent_containers/food/drinks/flask/detflask(src) + new /obj/item/weapon/storage/briefcase/crimekit(src) return /obj/structure/closet/secure_closet/detective/update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index aa820a48fa..0c49681489 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -66,18 +66,32 @@ ..() new /obj/item/clothing/head/det(src) new /obj/item/clothing/head/det(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/under/det(src) - new /obj/item/clothing/under/det(src) new /obj/item/clothing/head/det/grey(src) new /obj/item/clothing/head/det/grey(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/under/det(src) + new /obj/item/clothing/under/det(src) + new /obj/item/clothing/under/det/waistcoat(src) + new /obj/item/clothing/under/det/waistcoat(src) new /obj/item/clothing/under/det/grey(src) new /obj/item/clothing/under/det/grey(src) + new /obj/item/clothing/under/det/grey/waistcoat(src) + new /obj/item/clothing/under/det/grey/waistcoat(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/corporate(src) new /obj/item/clothing/under/det/corporate(src) + new /obj/item/clothing/suit/storage/det_trench(src) + new /obj/item/clothing/suit/storage/det_trench(src) + new /obj/item/clothing/suit/storage/det_trench/grey(src) + new /obj/item/clothing/suit/storage/det_trench/grey(src) + new /obj/item/clothing/suit/storage/forensics/blue(src) + new /obj/item/clothing/suit/storage/forensics/blue(src) + new /obj/item/clothing/suit/storage/forensics/red(src) + new /obj/item/clothing/suit/storage/forensics/red(src) return /obj/structure/closet/wardrobe/pink @@ -280,6 +294,9 @@ new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) return @@ -453,6 +470,8 @@ new /obj/item/clothing/under/rank/medical/green(src) new /obj/item/clothing/under/rank/medical/purple(src) new /obj/item/clothing/under/rank/medical/black(src) + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/head/surgery/purple(src) new /obj/item/clothing/head/surgery/blue(src) new /obj/item/clothing/head/surgery/green(src) @@ -516,7 +535,7 @@ new /obj/item/clothing/under/pants/black(src) new /obj/item/clothing/under/pants/tan(src) new /obj/item/clothing/under/pants/track(src) - new /obj/item/clothing/under/pants/jeans(src) + new /obj/item/clothing/under/pants(src) new /obj/item/clothing/under/pants/khaki(src) new /obj/item/clothing/mask/bandana/blue(src) new /obj/item/clothing/mask/bandana/blue(src) @@ -589,3 +608,29 @@ new /obj/item/clothing/under/scratch(src) new /obj/item/weapon/storage/backpack/satchel(src) new /obj/item/weapon/storage/backpack/satchel(src) + return + +/obj/structure/closet/wardrobe/captain + name = "captain's wardrobe" + icon_state = "cabinet_closed" + icon_closed = "cabinet_closed" + icon_opened = "cabinet_open" + +/obj/structure/closet/wardrobe/captain/New() + ..() + new /obj/item/weapon/storage/backpack/captain(src) + new /obj/item/clothing/suit/captunic(src) + new /obj/item/clothing/suit/captunic/capjacket(src) + new /obj/item/clothing/head/caphat/cap(src) + new /obj/item/clothing/under/rank/captain(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/gloves/captain(src) + new /obj/item/clothing/under/dress/dress_cap(src) + new /obj/item/weapon/storage/backpack/satchel_cap(src) + new /obj/item/clothing/head/caphat/formal(src) + new /obj/item/clothing/under/captainformal(src) + new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src) + new /obj/item/clothing/head/beret/centcom/captain(src) + new /obj/item/clothing/under/gimmick/rank/captain/suit(src) + new /obj/item/clothing/glasses/sunglasses(src) + return \ No newline at end of file diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 3d867111cc..20b326ebc9 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -40,7 +40,7 @@ /obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj) var/proj_damage = Proj.get_structure_damage() if(!proj_damage) return - + health -= proj_damage ..() if(health <= 0) @@ -248,6 +248,7 @@ desc = "Contains inflatable walls and doors." icon_state = "inf_box" item_state = "syringe_kit" + w_class = 3 max_storage_space = 28 can_hold = list(/obj/item/inflatable) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 2e82174e53..23ffac6465 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -306,8 +306,8 @@ if(istype(W, /obj/item/weapon/crowbar)) user << "You struggle to pry off the outer sheath." playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - sleep(100) - if(!istype(src, /turf/simulated/wall) || !user || !W || !T ) return + if(!do_after(user,100) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) + return if(user.loc == T && user.get_active_hand() == W ) user << "You pry off the outer sheath." dismantle_wall() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 7e2effce61..23c5961b66 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -16,7 +16,7 @@ var/global/floorIsLava = 0 var/rendered = "ATTACK: [text]" for(var/client/C in admins) if((R_ADMIN|R_MOD) & C.holder.rights) - if(C.is_preference_enabled(/datum/client_preference/admin/show_attack_logs)) + if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs)) var/msg = rendered C << msg @@ -895,22 +895,26 @@ proc/admin_notice(var/message, var/rights) ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode +/proc/is_special_character(var/character) // returns 1 for special characters and 2 for heroes of gamemode if(!ticker || !ticker.mode) return 0 - if (!istype(M)) - return 0 + var/datum/mind/M + if (ismob(character)) + var/mob/C = character + M = C.mind + else if(istype(character, /datum/mind)) + M = character - if(M.mind) + if(M) if(ticker.mode.antag_templates && ticker.mode.antag_templates.len) for(var/datum/antagonist/antag in ticker.mode.antag_templates) - if(antag.is_antagonist(M.mind)) + if(antag.is_antagonist(M)) return 2 - else if(M.mind.special_role) + else if(M.special_role) return 1 - if(isrobot(M)) - var/mob/living/silicon/robot/R = M + if(isrobot(character)) + var/mob/living/silicon/robot/R = character if(R.emagged) return 1 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 6dbdd74363..78aca1da78 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -8,8 +8,9 @@ var/list/admin_verbs_default = list( /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify, // /client/proc/check_antagonists, //shows all antags, // /client/proc/cmd_mod_say, - /client/proc/cmd_mentor_check_new_players + /client/proc/cmd_mentor_check_new_players, // /client/proc/deadchat //toggles deadchat on/off, +// /client/proc/toggle_ahelp_sound, ) var/list/admin_verbs_admin = list( /client/proc/player_panel_new, //shows an interface for all players, with links to various panels, @@ -91,7 +92,10 @@ var/list/admin_verbs_admin = list( /client/proc/change_security_level, /client/proc/view_chemical_reaction_logs, /client/proc/makePAI, - /datum/admins/proc/paralyze_mob + /client/proc/toggle_debug_logs, + /client/proc/toggle_attack_logs, + /datum/admins/proc/paralyze_mob, + /client/proc/fixatmos ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -188,6 +192,7 @@ var/list/admin_verbs_debug = list( /client/proc/jumptomob, /client/proc/jumptocoord, /client/proc/dsay, + /client/proc/toggle_debug_logs, /client/proc/admin_ghost //allows us to ghost/reenter body at will, ) @@ -294,6 +299,7 @@ var/list/admin_verbs_mod = list( /client/proc/check_antagonists, /client/proc/aooc, /client/proc/jobbans, + /client/proc/toggle_attack_logs, /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', /datum/admins/proc/paralyze_mob, /client/proc/cmd_admin_direct_narrate, @@ -515,12 +521,16 @@ var/list/admin_verbs_mentor = list( if(holder) if(holder.fakekey) holder.fakekey = null + if(istype(src.mob, /mob/new_player)) + mob.name = capitalize(ckey) else var/new_key = ckeyEx(input("Enter your desired display name.", "Fake Key", key) as text|null) if(!new_key) return if(length(new_key) >= 26) new_key = copytext(new_key, 1, 26) holder.fakekey = new_key + if(istype(mob, /mob/new_player)) + mob.name = new_key log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]") message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1) feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 57deed42a2..b21abd7e30 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -732,7 +732,7 @@ M.equip_to_slot_or_del(W, slot_wear_id) if("blue wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) @@ -744,7 +744,7 @@ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("red wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) @@ -756,7 +756,7 @@ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("marisa wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm new file mode 100644 index 0000000000..dd28127e4a --- /dev/null +++ b/code/modules/admin/verbs/grief_fixers.dm @@ -0,0 +1,54 @@ +/client/proc/fixatmos() + set category = "Admin" + set name = "Fix Atmospherics Grief" + + if(!check_rights(R_ADMIN|R_DEBUG)) return + + + if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No") + return + feedback_add_details("admin_verb","FA") + + log_and_message_admins("Full atmosphere reset initiated by [usr].") + world << "Initiating restart of atmosphere. The server may lag a bit." + sleep(10) + var/current_time = world.timeofday + + // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes. + for(var/obj/machinery/power/supermatter/S in machines) + S.power = 0 + usr << "\[1/5\] - Supermatter depowered" + + // Remove all gases from all pipenets + for(var/datum/pipe_network/PN in pipe_networks) + for(var/datum/gas_mixture/G in PN.gases) + G.gas = list() + G.update_values() + + usr << "\[2/5\] - All pipenets purged of gas." + + // Delete all zones. + for(var/zone/Z in world) + Z.c_invalidate() + + usr << "\[3/5\] - All ZAS Zones removed." + + var/list/unsorted_overlays = list() + for(var/id in gas_data.tile_overlay) + unsorted_overlays |= gas_data.tile_overlay[id] + + + for(var/turf/simulated/T in world) + T.air = null + T.overlays.Remove(unsorted_overlays) + T.zone = null + + usr << "\[4/5\] - All turfs reset to roundstart values." + + qdel(air_master) + air_master = new + air_master.Setup() + spawn air_master.Start() + + usr << "\[5/5\] - ZAS Rebooted" + world << "Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds." \ No newline at end of file diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 0961115d6a..b559652132 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,3 +46,5 @@ 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 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. + var/global/obj/screen/click_catcher/void + diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index c7a6dd7ccb..4c05ebece5 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -159,6 +159,10 @@ send_resources() nanomanager.send_resources(src) + + if(!void) + void = new() + screen += void if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates. src << "You have unread updates in the changelog." diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index eb25cb24e8..db9fa5227d 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -409,7 +409,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O choice_options = list("Normal","Prosthesis") var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options - if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION + if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION switch(new_state) if("Normal") diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index b7322645be..60eeeb144e 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -81,29 +81,33 @@ return ..() /client/proc/is_preference_enabled(var/preference) - if(ispath(preference)) - var/datum/client_preference/cp = get_client_preference_by_type(preference) - preference = cp.key - - return (preference in prefs.preferences_enabled) + var/datum/client_preference/cp = get_client_preference(preference) + return cp && (cp.key in prefs.preferences_enabled) /client/proc/set_preference(var/preference, var/set_preference) - var/datum/client_preference/cp - if(ispath(preference)) - cp = get_client_preference_by_type(preference) - else - cp = get_client_preference_by_key(preference) - + var/datum/client_preference/cp = get_client_preference(preference) if(!cp) return FALSE + preference = cp.key + + if(set_preference && !(preference in prefs.preferences_enabled)) + return toggle_preference(cp) + else if(!set_preference && (preference in prefs.preferences_enabled)) + return toggle_preference(cp) + +/client/proc/toggle_preference(var/preference, var/set_preference) + var/datum/client_preference/cp = get_client_preference(preference) + if(!cp) + return FALSE + preference = cp.key var/enabled - if(set_preference && !(preference in prefs.preferences_enabled)) - prefs.preferences_enabled += preference + if(preference in prefs.preferences_disabled) + prefs.preferences_enabled |= preference prefs.preferences_disabled -= preference enabled = TRUE . = TRUE - else if(!set_preference && (preference in prefs.preferences_enabled)) + else if(preference in prefs.preferences_enabled) prefs.preferences_enabled -= preference prefs.preferences_disabled |= preference enabled = FALSE diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index dd872e2c16..e5d408c477 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -11,6 +11,13 @@ var/list/_client_preferences_by_type _client_preferences += new client_type() return _client_preferences +/proc/get_client_preference(var/datum/client_preference/preference) + if(istype(preference)) + return preference + if(ispath(preference)) + return get_client_preference_by_type(preference) + return get_client_preference_by_key(preference) + /proc/get_client_preference_by_key(var/preference) if(!_client_preferences_by_key) _client_preferences_by_key = list() @@ -119,20 +126,37 @@ var/list/_client_preferences_by_type enabled_description = "Show" disabled_description = "Hide" +/datum/client_preference/show_progress_bar + description ="Progress Bar" + key = "SHOW_PROGRESS" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/safefiring + description = "Gun Firing Intent Requirement" + key = "SAFE_FIRING" + enabled_description = "Safe" + disabled_description = "Dangerous" /******************** -* Admin Preferences * +* Staff Preferences * ********************/ /datum/client_preference/admin/may_toggle(var/mob/preference_mob) return check_rights(R_ADMIN, 0, preference_mob) -/datum/client_preference/admin/show_attack_logs +/datum/client_preference/mod/may_toggle(var/mob/preference_mob) + return check_rights(R_MOD|R_ADMIN, 0, preference_mob) + +/datum/client_preference/debug/may_toggle(var/mob/preference_mob) + return check_rights(R_DEBUG|R_ADMIN, 0, preference_mob) + +/datum/client_preference/mod/show_attack_logs description = "Attack Log Messages" key = "CHAT_ATTACKLOGS" enabled_description = "Show" disabled_description = "Hide" enabled_by_default = FALSE -/datum/client_preference/admin/show_debug_logs +/datum/client_preference/debug/show_debug_logs description = "Debug Log Messages" key = "CHAT_DEBUGLOGS" enabled_description = "Show" @@ -158,4 +182,4 @@ var/list/_client_preferences_by_type description = "Radio chatter" key = "CHAT_RADIO" enabled_description = "Show" - disabled_description = "Hide" + disabled_description = "Hide" \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm new file mode 100644 index 0000000000..820c95f324 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -0,0 +1,144 @@ +/datum/gear_tweak/proc/get_contents(var/metadata) + return + +/datum/gear_tweak/proc/get_metadata(var/user, var/metadata) + return + +/datum/gear_tweak/proc/get_default() + return + +/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) + return + +/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata) + return + +/* +* Color adjustment +*/ + +var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() + +/datum/gear_tweak/color + var/list/valid_colors + +/datum/gear_tweak/color/New(var/list/valid_colors) + src.valid_colors = valid_colors + ..() + +/datum/gear_tweak/color/get_contents(var/metadata) + return "Color: " + +/datum/gear_tweak/color/get_default() + return valid_colors ? valid_colors[1] : COLOR_GRAY + +/datum/gear_tweak/color/get_metadata(var/user, var/metadata) + if(valid_colors) + return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors + return input(user, "Choose an item color.", "Global Preference", metadata) as color|null + +/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) + if(valid_colors && !(metadata in valid_colors)) + return + I.color = metadata + +/* +* Path adjustment +*/ + +/datum/gear_tweak/path + var/list/valid_paths + +/datum/gear_tweak/path/New(var/list/valid_paths) + src.valid_paths = valid_paths + ..() + +/datum/gear_tweak/path/get_contents(var/metadata) + return "Type: [metadata]" + +/datum/gear_tweak/path/get_default() + return valid_paths[1] + +/datum/gear_tweak/path/get_metadata(var/user, var/metadata) + return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths + +/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) + if(!(metadata in valid_paths)) + return + gear_data.path = valid_paths[metadata] + +/* +* Content adjustment +*/ + +/datum/gear_tweak/contents + var/list/valid_contents + +/datum/gear_tweak/contents/New() + valid_contents = args.Copy() + ..() + +/datum/gear_tweak/contents/get_contents(var/metadata) + return "Contents: [english_list(metadata, and_text = ", ")]" + +/datum/gear_tweak/contents/get_default() + . = list() + for(var/i = 1 to valid_contents.len) + . += "Random" + +/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) + . = list() + for(var/i = metadata.len to valid_contents.len) + metadata += "Random" + for(var/i = 1 to valid_contents.len) + var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) + if(entry) + . += entry + else + return metadata + +/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata.len != valid_contents.len) + return + for(var/i = 1 to valid_contents.len) + var/path + var/list/contents = valid_contents[i] + if(metadata[i] == "Random") + path = pick(contents) + path = contents[path] + else if(metadata[i] == "None") + continue + else + path = contents[metadata[i]] + new path(I) + +/* +* Ragent adjustment +*/ + +/datum/gear_tweak/reagents + var/list/valid_reagents + +/datum/gear_tweak/reagents/New(var/list/reagents) + valid_reagents = reagents.Copy() + ..() + +/datum/gear_tweak/reagents/get_contents(var/metadata) + return "Reagents: [metadata]" + +/datum/gear_tweak/reagents/get_default() + return "Random" + +/datum/gear_tweak/reagents/get_metadata(var/user, var/list/metadata) + . = input(user, "Choose an entry.", "Character Preference", metadata) as null|anything in (valid_reagents + list("Random", "None")) + if(!.) + return metadata + +/datum/gear_tweak/reagents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata == "None") + return + if(metadata == "Random") + . = valid_reagents[pick(valid_reagents)] + else + . = valid_reagents[metadata] + I.reagents.add_reagent(., I.reagents.get_free_space()) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index a8b5b680fd..4244cd0037 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -92,6 +92,7 @@ var/list/gear_datums = list() var/fcolor = "#3366CC" if(total_cost < MAX_GEAR_COST) fcolor = "#E67300" + . += list() . += "" . += "" @@ -122,11 +123,33 @@ var/list/gear_datums = list() for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in pref.gear) - var/obj/item/temp = G.path - . += "" - . += "" - . += "" + . += "" + . += "" + . += "" + if(ticked) + . += "" . += "
[total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
[G.display_name][G.cost][initial(temp.desc)]
[G.display_name][G.cost][G.description]
" + for(var/datum/gear_tweak/tweak in G.gear_tweaks) + . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" + . += "
" + . = jointext(.) + +/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G) + . = pref.gear[G.display_name] + if(!.) + . = list() + pref.gear[G.display_name] = . + +/datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) + var/list/metadata = get_gear_metadata(G) + . = metadata["[tweak]"] + if(!.) + . = tweak.get_default() + metadata["[tweak]"] = . + +/datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) + var/list/metadata = get_gear_metadata(G) + metadata["[tweak]"] = new_metadata /datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) if(href_list["toggle_gear"]) @@ -141,6 +164,16 @@ var/list/gear_datums = list() if((total_cost+TG.cost) <= MAX_GEAR_COST) pref.gear += TG.display_name return TOPIC_REFRESH + if(href_list["gear"] && href_list["tweak"]) + var/datum/gear/gear = gear_datums[href_list["gear"]] + var/datum/gear_tweak/tweak = locate(href_list["tweak"]) + if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) + return TOPIC_NOACTION + var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) + if(!metadata || !CanUseTopic(user)) + return TOPIC_NOACTION + set_tweak_metadata(gear, tweak, metadata) + return TOPIC_REFRESH else if(href_list["select_category"]) current_tab = href_list["select_category"] return TOPIC_REFRESH @@ -151,11 +184,34 @@ var/list/gear_datums = list() /datum/gear var/display_name //Name/index. Must be unique. + var/description //Description of this gear. If left blank will default to the description of the pathed item. var/path //Path to item. var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. var/slot //Slot to equip to. var/list/allowed_roles //Roles that can spawn with this item. var/whitelisted //Term to check the whitelist for.. var/sort_category = "General" + var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. +/datum/gear/New() + ..() + if(!description) + var/obj/O = path + description = initial(O.desc) +/datum/gear_data + var/path + var/location + +/datum/gear_data/New(var/path, var/location) + src.path = path + src.location = location + +/datum/gear/proc/spawn_item(var/location, var/metadata) + var/datum/gear_data/gd = new(path, location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_gear_data(metadata["[gt]"], gd) + var/item = new gd.path(gd.location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_item(item, metadata["[gt]"]) + return item diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 53b499664c..ced70ebef8 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -131,6 +131,11 @@ path = /obj/item/clothing/accessory/storage/black_vest allowed_roles = list("Security Officer","Head of Security","Warden") +/datum/gear/accessory/white_vest + display_name = "webbing, medical" + path = /obj/item/clothing/accessory/storage/white_vest + allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor") + /datum/gear/accessory/webbing display_name = "webbing, simple" path = /obj/item/clothing/accessory/storage/webbing diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index bd7f87e5e5..2b1c4bbb6b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -30,10 +30,34 @@ display_name = "flask" path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask +/datum/gear/flask/New() + ..() + gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents()) + /datum/gear/vacflask display_name = "vacuum-flask" path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask +/datum/gear/vacflask/New() + ..() + gear_tweaks += new/datum/gear_tweak/reagents(lunchables_drink_reagents()) + /datum/gear/comb display_name = "purple comb" - path = /obj/item/weapon/haircomb \ No newline at end of file + path = /obj/item/weapon/haircomb + +/datum/gear/lunchbox + display_name = "lunchbox" + description = "A little lunchbox." + cost = 2 + path = /obj/item/weapon/storage/toolbox/lunchbox + +/datum/gear/lunchbox/New() + ..() + var/list/lunchboxes = list() + for(var/lunchbox_type in typesof(/obj/item/weapon/storage/toolbox/lunchbox)) + var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type + if(!initial(lunchbox.filled)) + lunchboxes[initial(lunchbox.name)] = lunchbox_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes)) + gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks()) diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index a58f3a450a..a2635ef79c 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -187,253 +187,25 @@ whitelisted = "Tajara" /datum/gear/head/hijab - display_name = "hijab, black" + display_name = "hijab" path = /obj/item/clothing/head/hijab -/datum/gear/head/hijab/white - display_name = "hijab, white" - path = /obj/item/clothing/head/hijab/white - -/datum/gear/head/hijab/aqua - display_name = "hijab, aqua" - path = /obj/item/clothing/head/hijab/aqua - -/datum/gear/head/hijab/blue - display_name = "hijab, blue" - path = /obj/item/clothing/head/hijab/blue - -/datum/gear/head/hijab/brown - display_name = "hijab, brown" - path = /obj/item/clothing/head/hijab/brown - -/datum/gear/head/hijab/darkblue - display_name = "hijab, dark blue" - path = /obj/item/clothing/head/hijab/darkblue - -/datum/gear/head/hijab/darkred - display_name = "hijab, dark red" - path = /obj/item/clothing/head/hijab/darkred - -/datum/gear/head/hijab/green - display_name = "hijab, green" - path = /obj/item/clothing/head/hijab/green - -/datum/gear/head/hijab/grey - display_name = "hijab, grey" - path = /obj/item/clothing/head/hijab/grey - -/datum/gear/head/hijab/lightblue - display_name = "hijab, light blue" - path = /obj/item/clothing/head/hijab/lightblue - -/datum/gear/head/hijab/lightbrown - display_name = "hijab, light brown" - path = /obj/item/clothing/head/hijab/lightbrown - -/datum/gear/head/hijab/lightgreen - display_name = "hijab, light green" - path = /obj/item/clothing/head/hijab/lightgreen - -/datum/gear/head/hijab/lightpurple - display_name = "hijab, light purple" - path = /obj/item/clothing/head/hijab/lightpurple - -/datum/gear/head/hijab/lightred - display_name = "hijab, light red" - path = /obj/item/clothing/head/hijab/lightred - -/datum/gear/head/hijab/maroon - display_name = "hijab, maroon" - path = /obj/item/clothing/head/hijab/maroon - -/datum/gear/head/hijab/orange - display_name = "hijab, orange" - path = /obj/item/clothing/head/hijab/orange - -/datum/gear/head/hijab/pink - display_name = "hijab, pink" - path = /obj/item/clothing/head/hijab/pink - -/datum/gear/head/hijab/purple - display_name = "hijab, purple" - path = /obj/item/clothing/head/hijab/purple - -/datum/gear/head/hijab/red - display_name = "hijab, red" - path = /obj/item/clothing/head/hijab/red - -/datum/gear/head/hijab/yellowgreen - display_name = "hijab, yellow green" - path = /obj/item/clothing/head/hijab/yellowgreen - -/datum/gear/head/hijab/yellow - display_name = "hijab, yellow" - path = /obj/item/clothing/head/hijab/yellow +/datum/gear/head/hijab/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) /datum/gear/head/kippa - display_name = "kippa, black" + display_name = "kippa" path = /obj/item/clothing/head/kippa -/datum/gear/head/kippa/white - display_name = "kippa, white" - path = /obj/item/clothing/head/kippa/white - -/datum/gear/head/kippa/aqua - display_name = "kippa, aqua" - path = /obj/item/clothing/head/kippa/aqua - -/datum/gear/head/kippa/blue - display_name = "kippa, blue" - path = /obj/item/clothing/head/kippa/blue - -/datum/gear/head/kippa/brown - display_name = "kippa, brown" - path = /obj/item/clothing/head/kippa/brown - -/datum/gear/head/kippa/darkblue - display_name = "kippa, dark blue" - path = /obj/item/clothing/head/kippa/darkblue - -/datum/gear/head/kippa/darkred - display_name = "kippa, dark red" - path = /obj/item/clothing/head/kippa/darkred - -/datum/gear/head/kippa/green - display_name = "kippa, green" - path = /obj/item/clothing/head/kippa/green - -/datum/gear/head/kippa/grey - display_name = "kippa, grey" - path = /obj/item/clothing/head/kippa/grey - -/datum/gear/head/kippa/lightblue - display_name = "kippa, light blue" - path = /obj/item/clothing/head/kippa/lightblue - -/datum/gear/head/kippa/lightbrown - display_name = "kippa, light brown" - path = /obj/item/clothing/head/kippa/lightbrown - -/datum/gear/head/kippa/lightgreen - display_name = "kippa, light green" - path = /obj/item/clothing/head/kippa/lightgreen - -/datum/gear/head/kippa/lightpurple - display_name = "kippa, light purple" - path = /obj/item/clothing/head/kippa/lightpurple - -/datum/gear/head/kippa/lightred - display_name = "kippa, light red" - path = /obj/item/clothing/head/kippa/lightred - -/datum/gear/head/kippa/maroon - display_name = "kippa, maroon" - path = /obj/item/clothing/head/kippa/maroon - -/datum/gear/head/kippa/orange - display_name = "kippa, orange" - path = /obj/item/clothing/head/kippa/orange - -/datum/gear/head/kippa/pink - display_name = "kippa, pink" - path = /obj/item/clothing/head/kippa/pink - -/datum/gear/head/kippa/purple - display_name = "kippa, purple" - path = /obj/item/clothing/head/kippa/purple - -/datum/gear/head/kippa/red - display_name = "kippa, red" - path = /obj/item/clothing/head/kippa/red - -/datum/gear/head/kippa/yellowgreen - display_name = "kippa, yellow green" - path = /obj/item/clothing/head/kippa/yellowgreen - -/datum/gear/head/kippa/yellow - display_name = "kippa, yellow" - path = /obj/item/clothing/head/kippa/yellow +/datum/gear/head/kippa/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) /datum/gear/head/turban - display_name = "turban, black" + display_name = "turban" path = /obj/item/clothing/head/turban -/datum/gear/head/turban/white - display_name = "turban, white" - path = /obj/item/clothing/head/turban/white - -/datum/gear/head/turban/aqua - display_name = "turban, aqua" - path = /obj/item/clothing/head/turban/aqua - -/datum/gear/head/turban/blue - display_name = "turban, blue" - path = /obj/item/clothing/head/turban/blue - -/datum/gear/head/turban/brown - display_name = "turban, brown" - path = /obj/item/clothing/head/turban/brown - -/datum/gear/head/turban/darkblue - display_name = "turban, dark blue" - path = /obj/item/clothing/head/turban/darkblue - -/datum/gear/head/turban/darkred - display_name = "turban, dark red" - path = /obj/item/clothing/head/turban/darkred - -/datum/gear/head/turban/green - display_name = "turban, green" - path = /obj/item/clothing/head/turban/green - -/datum/gear/head/turban/grey - display_name = "turban, grey" - path = /obj/item/clothing/head/turban/grey - -/datum/gear/head/turban/lightblue - display_name = "turban, light blue" - path = /obj/item/clothing/head/turban/lightblue - -/datum/gear/head/turban/lightbrown - display_name = "turban, light brown" - path = /obj/item/clothing/head/turban/lightbrown - -/datum/gear/head/turban/lightgreen - display_name = "turban, light green" - path = /obj/item/clothing/head/turban/lightgreen - -/datum/gear/head/turban/lightpurple - display_name = "turban, light purple" - path = /obj/item/clothing/head/turban/lightpurple - -/datum/gear/head/turban/lightred - display_name = "turban, light red" - path = /obj/item/clothing/head/turban/lightred - -/datum/gear/head/turban/maroon - display_name = "turban, maroon" - path = /obj/item/clothing/head/turban/maroon - -/datum/gear/head/turban/orange - display_name = "turban, orange" - path = /obj/item/clothing/head/turban/orange - -/datum/gear/head/turban/pink - display_name = "turban, pink" - path = /obj/item/clothing/head/turban/pink - -/datum/gear/head/turban/purple - display_name = "turban, purple" - path = /obj/item/clothing/head/turban/purple - -/datum/gear/head/turban/red - display_name = "turban, red" - path = /obj/item/clothing/head/turban/red - -/datum/gear/head/turban/yellowgreen - display_name = "turban, yellow green" - path = /obj/item/clothing/head/turban/yellowgreen - -/datum/gear/head/turban/yellow - display_name = "turban, yellow" - path = /obj/item/clothing/head/turban/yellow \ No newline at end of file +/datum/gear/head/turban/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 997520a1c7..80b5e2bd6a 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -59,48 +59,16 @@ path = /obj/item/clothing/suit/storage/hazardvest /datum/gear/suit/hoodie - display_name = "hoodie, grey" + display_name = "hoodie selection" path = /obj/item/clothing/suit/storage/toggle/hoodie -/datum/gear/suit/hoodie/red - display_name = "hoodie, red" - path = /obj/item/clothing/suit/storage/toggle/hoodie/red - -/datum/gear/suit/hoodie/blue - display_name = "hoodie, blue" - path = /obj/item/clothing/suit/storage/toggle/hoodie/blue - -/datum/gear/suit/hoodie/yellow - display_name = "hoodie, yellow" - path = /obj/item/clothing/suit/storage/toggle/hoodie/yellow - -/datum/gear/suit/hoodie/green - display_name = "hoodie, green" - path = /obj/item/clothing/suit/storage/toggle/hoodie/green - -/datum/gear/suit/hoodie/orange - display_name = "hoodie, orange" - path = /obj/item/clothing/suit/storage/toggle/hoodie/orange - -/datum/gear/suit/hoodie/black - display_name = "hoodie, black" - path = /obj/item/clothing/suit/storage/toggle/hoodie/black - -/datum/gear/suit/hoodie/cti - display_name = "hoodie, CTI" - path = /obj/item/clothing/suit/storage/toggle/hoodie/cti - -/datum/gear/suit/hoodie/mu - display_name = "hoodie, MU" - path = /obj/item/clothing/suit/storage/toggle/hoodie/mu - -/datum/gear/suit/hoodie/nt - display_name = "hoodie, NT" - path = /obj/item/clothing/suit/storage/toggle/hoodie/nt - -/datum/gear/suit/hoodie/smw - display_name = "hoodie, Space Mountain Wind" - path = /obj/item/clothing/suit/storage/toggle/hoodie/smw +/datum/gear/suit/hoodie/New() + ..() + var/list/hoodies = list() + for(var/hoodie_style in typesof(/obj/item/clothing/suit/storage/toggle/hoodie)) + var/obj/item/clothing/suit/storage/toggle/hoodie/hoodie = hoodie_style + hoodies[initial(hoodie.name)] = hoodie + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hoodies)) /datum/gear/suit/labcoat display_name = "labcoat" @@ -145,30 +113,43 @@ cost = 1 /datum/gear/suit/poncho - display_name = "poncho, tan" + display_name = "poncho selection" path = /obj/item/clothing/suit/poncho cost = 1 -/datum/gear/suit/poncho/blue - display_name = "poncho, blue" - path = /obj/item/clothing/suit/poncho/blue +/datum/gear/suit/poncho/New() + ..() + var/list/ponchos = list() + for(var/poncho_style in (typesof(/obj/item/clothing/suit/poncho) - typesof(/obj/item/clothing/suit/poncho/roles))) + var/obj/item/clothing/suit/storage/toggle/hoodie/poncho = poncho_style + ponchos[initial(poncho.name)] = poncho + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ponchos)) -/datum/gear/suit/poncho/green - display_name = "poncho, green" - path = /obj/item/clothing/suit/poncho/green - -/datum/gear/suit/poncho/purple - display_name = "poncho, purple" - path = /obj/item/clothing/suit/poncho/purple - -/datum/gear/suit/poncho/red - display_name = "poncho, red" - path = /obj/item/clothing/suit/poncho/red - -/datum/gear/suit/poncho/security +/datum/gear/suit/poncho/roles/security display_name = "poncho, security" - path = /obj/item/clothing/suit/poncho/security + path = /obj/item/clothing/suit/poncho/roles/security + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") +/datum/gear/suit/poncho/roles/medical + display_name = "poncho, medical" + path = /obj/item/clothing/suit/poncho/roles/medical + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + +/datum/gear/suit/poncho/roles/engineering + display_name = "poncho, engineering" + path = /obj/item/clothing/suit/poncho/roles/engineering + allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer") + +/datum/gear/suit/poncho/roles/science + display_name = "poncho, science" + path = /obj/item/clothing/suit/poncho/roles/science + allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobotanist") + +/datum/gear/suit/poncho/roles/cargo + display_name = "poncho, cargo" + path = /obj/item/clothing/suit/poncho/roles/cargo + allowed_roles = list("Quartermaster","Cargo Technician") + /datum/gear/suit/unathi_robe display_name = "roughspun robe" path = /obj/item/clothing/suit/unathi/robe @@ -213,4 +194,4 @@ /datum/gear/suit/forensics/red/short display_name = "forensics, red" path = /obj/item/clothing/suit/storage/forensics/red - allowed_roles = list("Detective") \ No newline at end of file + allowed_roles = list("Detective") diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 927ed31743..5ea992d093 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -33,93 +33,17 @@ display_name = "cut top, red" path = /obj/item/clothing/under/cuttop/red -/datum/gear/uniform/jumpskirt - display_name = "jumpskirt, black" - path = /obj/item/clothing/under/blackjumpskirt - /datum/gear/uniform/jumpsuit - display_name = "jumpsuit, rainbow" - path = /obj/item/clothing/under/rainbow - -/datum/gear/uniform/jumpsuit/black - display_name = "jumpsuit, black" - path = /obj/item/clothing/under/color/black - -/datum/gear/uniform/jumpsuit/blackfemale - display_name = "jumpsuit, female-black" - path = /obj/item/clothing/under/color/blackf - -/datum/gear/uniform/jumpsuit/blue - display_name = "jumpsuit, blue" - path = /obj/item/clothing/under/color/blue - -/datum/gear/uniform/jumpsuit/green - display_name = "jumpsuit, green" - path = /obj/item/clothing/under/color/green - -/datum/gear/uniform/jumpsuit/grey - display_name = "jumpsuit, grey" + display_name = "jumpclothes selection" path = /obj/item/clothing/under/color/grey -/datum/gear/uniform/jumpsuit/pink - display_name = "jumpsuit, pink" - path = /obj/item/clothing/under/color/pink - -/datum/gear/uniform/jumpsuit/white - display_name = "jumpsuit, white" - path = /obj/item/clothing/under/color/white - -/datum/gear/uniform/jumpsuit/yellow - display_name = "jumpsuit, yellow" - path = /obj/item/clothing/under/color/yellow - -/datum/gear/uniform/jumpsuit/lightblue - display_name = "jumpsuit, lightblue" - path = /obj/item/clothing/under/lightblue - -/datum/gear/uniform/jumpsuit/red - display_name = "jumpsuit, red" - path = /obj/item/clothing/under/color/red - -/datum/gear/uniform/jumpsuit/aqua - display_name = "jumpsuit, aqua" - path = /obj/item/clothing/under/aqua - -/datum/gear/uniform/jumpsuit/purple - display_name = "jumpsuit, purple" - path = /obj/item/clothing/under/purple - -/datum/gear/uniform/jumpsuit/lightpurple - display_name = "jumpsuit, lightpurple" - path = /obj/item/clothing/under/lightpurple - -/datum/gear/uniform/jumpsuit/lightgreen - display_name = "jumpsuit, lightgreen" - path = /obj/item/clothing/under/lightgreen - -/datum/gear/uniform/jumpsuit/lightbrown - display_name = "jumpsuit, lightbrown" - path = /obj/item/clothing/under/lightbrown - -/datum/gear/uniform/jumpsuit/brown - display_name = "jumpsuit, brown" - path = /obj/item/clothing/under/brown - -/datum/gear/uniform/jumpsuit/yellowgreen - display_name = "jumpsuit, yellowgreen" - path = /obj/item/clothing/under/yellowgreen - -/datum/gear/uniform/jumpsuit/darkblue - display_name = "jumpsuit, darkblue" - path = /obj/item/clothing/under/darkblue - -/datum/gear/uniform/jumpsuit/lightred - display_name = "jumpsuit, lightred" - path = /obj/item/clothing/under/lightred - -/datum/gear/uniform/jumpsuit/darkred - display_name = "jumpsuit, darkred" - path = /obj/item/clothing/under/darkred +/datum/gear/uniform/jumpsuit/New() + ..() + var/list/jumpclothes = list() + for(var/jump in typesof(/obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/jumps = jump + jumpclothes[initial(jumps.name)] = jumps + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes)) /datum/gear/uniform/skirt display_name = "plaid skirt, blue" @@ -228,100 +152,28 @@ allowed_roles = list("Quartermaster","Cargo Technician") /datum/gear/uniform/pants - display_name = "pants, white" + display_name = "pants selection" path = /obj/item/clothing/under/pants/white -/datum/gear/uniform/pants/red - display_name = "pants, red" - path = /obj/item/clothing/under/pants/red +/datum/gear/uniform/pants/New() + ..() + var/list/pants = list() + for(var/pant in typesof(/obj/item/clothing/under/pants)) + var/obj/item/clothing/under/pants/pant_type = pant + pants[initial(pant_type.name)] = pant_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) -/datum/gear/uniform/pants/black - display_name = "pants, black" - path = /obj/item/clothing/under/pants/black - -/datum/gear/uniform/pants/tan - display_name = "pants, tan" - path = /obj/item/clothing/under/pants/tan - -/datum/gear/uniform/pants/track - display_name = "pants, track" - path = /obj/item/clothing/under/pants/track - -/datum/gear/uniform/pants/khaki - display_name = "pants, khaki" - path = /obj/item/clothing/under/pants/khaki - -/datum/gear/uniform/pants/camo - display_name = "pants, camo" - path = /obj/item/clothing/under/pants/camo - -/datum/gear/uniform/pants/jeans - display_name = "pants, jeans" - path = /obj/item/clothing/under/pants/jeans - -/datum/gear/uniform/pants/jeans/classic - display_name = "pants, classic jeans" - path = /obj/item/clothing/under/pants/classicjeans - -/datum/gear/uniform/pants/jeans/mustang - display_name = "pants, mustang jeans" - path = /obj/item/clothing/under/pants/mustangjeans - -/datum/gear/uniform/pants/jeans/black - display_name = "pants, black jeans" - path = /obj/item/clothing/under/pants/blackjeans - -/datum/gear/uniform/pants/jeans/youngfolks - display_name = "pants, young folks jeans" - path = /obj/item/clothing/under/pants/youngfolksjeans - -/datum/gear/uniform/jeans - display_name = "shorts, jeans" +/datum/gear/uniform/shorts + display_name = "shorts selection" path = /obj/item/clothing/under/shorts/jeans -/datum/gear/uniform/jeans/classic - display_name = "shorts, classic jeans" - path = /obj/item/clothing/under/shorts/jeans/classic - -/datum/gear/uniform/jeans/mustang - display_name = "shorts, mustang jeans" - path = /obj/item/clothing/under/shorts/jeans/mustang - -/datum/gear/uniform/jeans/youngfolks - display_name = "shorts, young folks jeans" - path = /obj/item/clothing/under/shorts/jeans/youngfolks - -/datum/gear/uniform/jeans/black - display_name = "shorts, black jeans" - path = /obj/item/clothing/under/shorts/jeans/black - -/datum/gear/uniform/jeans/female - display_name = "shorts, female, jeans" - path = /obj/item/clothing/under/shorts/jeans/female - -/datum/gear/uniform/jeans/classic/female - display_name = "shorts, female, classic jeans" - path = /obj/item/clothing/under/shorts/jeans/classic/female - -/datum/gear/uniform/jeans/mustang/female - display_name = "shorts, female, mustang jeans" - path = /obj/item/clothing/under/shorts/jeans/mustang/female - -/datum/gear/uniform/jeans/youngfolks/female - display_name = "shorts, female, young folks jeans" - path = /obj/item/clothing/under/shorts/jeans/youngfolks/female - -/datum/gear/uniform/jeans/black/female - display_name = "shorts, female, black jeans" - path = /obj/item/clothing/under/shorts/jeans/black/female - -/datum/gear/uniform/khaki - display_name = "shorts, khaki" - path = /obj/item/clothing/under/shorts/khaki - -/datum/gear/uniform/khaki/female - display_name = "shorts, female, khaki" - path = /obj/item/clothing/under/shorts/khaki/female +/datum/gear/uniform/shorts/New() + ..() + var/list/shorts = list() + for(var/short in typesof(/obj/item/clothing/under/shorts)) + var/obj/item/clothing/under/pants/short_type = short + shorts[initial(short_type.name)] = short_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts)) /datum/gear/uniform/suit //amish display_name = "suit, amish" @@ -412,6 +264,10 @@ display_name = "scrubs, green" path = /obj/item/clothing/under/rank/medical/green +/datum/gear/uniform/scrubs/navyblue + display_name = "scrubs, navy blue" + path = /obj/item/clothing/under/rank/medical/navyblue + /datum/gear/uniform/sundress display_name = "sundress" path = /obj/item/clothing/under/sundress @@ -439,6 +295,16 @@ path = /obj/item/clothing/under/rank/security/corp allowed_roles = list("Security Officer","Head of Security","Warden") +/datum/gear/uniform/corpwarsuit + display_name = "uniform, corporate (Warden)" + path = /obj/item/clothing/under/rank/warden/corp + allowed_roles = list("Head of Security","Warden") + +/datum/gear/uniform/corphossuit + display_name = "uniform, corporate (Head of Security)" + path = /obj/item/clothing/under/rank/head_of_security/corp + allowed_roles = list("Head of Security") + /datum/gear/uniform/uniform_hop display_name = "uniform, HoP's dress" path = /obj/item/clothing/under/dress/dress_hop @@ -451,6 +317,16 @@ allowed_roles = list("Head of Personnel") /datum/gear/uniform/navysecsuit - display_name = "uniform, navyblue (Security)" + display_name = "uniform, navy blue (Security)" path = /obj/item/clothing/under/rank/security/navyblue - allowed_roles = list("Security Officer","Head of Security","Warden") \ No newline at end of file + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/uniform/navywarsuit + display_name = "uniform, navy blue (Wardem)" + path = /obj/item/clothing/under/rank/warden/navyblue + allowed_roles = list("Head of Security","Warden") + +/datum/gear/uniform/navyhossuit + display_name = "uniform, navy blue (Head of Security)" + path = /obj/item/clothing/under/rank/head_of_security/navyblue + allowed_roles = list("Head of Security") \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index 8ff1003214..79e6a1ec7f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -62,29 +62,29 @@ display_name = "headtail-wear, female, pink, cloth (Skrell)" path = /obj/item/clothing/ears/skrell/cloth_female/pink -/datum/gear/uniform/jumpsuit/teshari +/datum/gear/uniform/teshari display_name = "smock, grey (Teshari)" path = /obj/item/clothing/under/seromi whitelisted = "Teshari" sort_category = "Xenowear" -/datum/gear/uniform/jumpsuit/teshari/yellow +/datum/gear/uniform/teshari/jumpsuit display_name = "smock, yellow (Teshari)" path = /obj/item/clothing/under/seromi/yellow -/datum/gear/uniform/jumpsuit/teshari/red +/datum/gear/uniform/teshari/jumpsuit/red display_name = "smock, red (Teshari)" path = /obj/item/clothing/under/seromi/red -/datum/gear/uniform/jumpsuit/teshari/white +/datum/gear/uniform/teshari/jumpsuit/white display_name = "smock, white (Teshari)" path = /obj/item/clothing/under/seromi/white -/datum/gear/uniform/jumpsuit/teshari/medical +/datum/gear/uniform/teshari/jumpsuit/medical display_name = "smock, Medical (Teshari)" path = /obj/item/clothing/under/seromi/medical -/datum/gear/uniform/jumpsuit/teshari/rainbow +/datum/gear/uniform/teshari/jumpsuit/rainbow display_name = "smock, rainbow (Teshari)" path = /obj/item/clothing/under/seromi/rainbow diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 92c6320c64..62c3fc206d 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -44,7 +44,7 @@ pref.job_engsec_high = sanitize_integer(pref.job_engsec_high, 0, 65535, initial(pref.job_engsec_high)) pref.job_engsec_med = sanitize_integer(pref.job_engsec_med, 0, 65535, initial(pref.job_engsec_med)) pref.job_engsec_low = sanitize_integer(pref.job_engsec_low, 0, 65535, initial(pref.job_engsec_low)) - if(!pref.player_alt_titles) pref.player_alt_titles = new() + if(!(pref.player_alt_titles)) pref.player_alt_titles = new() if(!job_master) return diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index 1f60cd3bb7..8370f35668 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -57,7 +57,7 @@ else if(href_list["preconfigured"]) var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE - if(!selected && !CanUseTopic(user)) return + if(!selected || !CanUseTopic(user)) return pref.ZeroSkills(1) for(var/V in SKILL_PRE[selected]) diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm new file mode 100644 index 0000000000..f074fee298 --- /dev/null +++ b/code/modules/client/preferences_toggle_procs.dm @@ -0,0 +1,225 @@ +//Toggles for preferences, normal clients +/client/verb/toggle_ghost_ears() + set name = "Show/Hide Ghost Ears" + set category = "Preferences" + set desc = "Toggles between seeing all mob speech and nearby mob speech." + + var/pref_path = /datum/client_preference/ghost_ears + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear all mob speech as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TGEars") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ghost_vision() + set name = "Show/Hide Ghost Vision" + set category = "Preferences" + set desc = "Toggles between seeing all mob emotes and nearby mob emotes." + + var/pref_path = /datum/client_preference/ghost_sight + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] see all emotes as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TGVision") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ghost_radio() + set name = "Show/Hide Radio Chatter" + set category = "Preferences" + set desc = "Toggles between seeing all radio chat and nearby radio chatter." + + var/pref_path = /datum/client_preference/ghost_radio + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all radios as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TGRadio") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_deadchat() + set name = "Show/Hide Deadchat" + set category = "Preferences" + set desc = "Toggles the dead chat channel." + + var/pref_path = /datum/client_preference/show_dsay + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear dead chat as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TDeadChat") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ooc() + set name = "Show/Hide OOC" + set category = "Preferences" + set desc = "Toggles global out of character chat." + + var/pref_path = /datum/client_preference/show_ooc + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(/datum/client_preference/show_ooc)) ? "now" : "no longer"] hear global out of character chat." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_looc() + set name = "Show/Hide LOOC" + set category = "Preferences" + set desc = "Toggles local out of character chat." + + var/pref_path = /datum/client_preference/show_looc + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear local out of character chat." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_typing() + set name = "Show/Hide Typing Indicator" + set category = "Preferences" + set desc = "Toggles the speech bubble typing indicator." + + var/pref_path = /datum/client_preference/show_typing_indicator + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see the speech indicator." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ahelp_sound() + set name = "Toggle Admin Help Sound" + set category = "Preferences" + set desc = "Toggles the ability to hear a noise broadcasted when you get an admin message." + + var/pref_path = /datum/client_preference/holder/play_adminhelp_ping + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive noise from admin messages." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TAHelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_lobby_music() + set name = "Toggle Lobby Music" + set category = "Preferences" + set desc = "Toggles the music in the lobby." + + var/pref_path = /datum/client_preference/play_lobby_music + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear music in the lobby." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TLobMusic") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_admin_midis() + set name = "Toggle Admin MIDIs" + set category = "Preferences" + set desc = "Toggles the music in the lobby." + + var/pref_path = /datum/client_preference/play_admin_midis + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear MIDIs from admins." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TAMidis") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ambience() + set name = "Toggle Ambience" + set category = "Preferences" + set desc = "Toggles the playing of ambience." + + var/pref_path = /datum/client_preference/play_ambiance + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear ambient noise." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_be_special(role in be_special_flags) + set name = "Toggle SpecialRole Candidacy" + set category = "Preferences" + set desc = "Toggles which special roles you would like to be a candidate for, during events." + + var/role_flag = be_special_flags[role] + if(!role_flag) return + + prefs.be_special ^= role_flag + prefs.save_preferences() + + src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)." + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_safe_firing() + set name = "Toggle Gun Firing Intent Requirement" + set category = "Preferences" + set desc = "Toggles between safe and dangerous firing. Safe requires a non-help intent to fire, dangerous can be fired on help intent." + + var/pref_path = /datum/client_preference/safefiring + toggle_preference(pref_path) + prefs.save_preferences() + + src << "You will now use [(is_preference_enabled(/datum/client_preference/safefiring)) ? "safe" : "dangerous"] firearms firing." + + feedback_add_details("admin_verb","TFiringMode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +//Toggles for Staff +//Developers + +/client/proc/toggle_debug_logs() + set name = "Toggle Debug Logs" + set category = "Preferences" + set desc = "Toggles debug logs." + + var/pref_path = /datum/client_preference/debug/show_debug_logs + + if(check_rights(R_ADMIN|R_DEBUG)) + toggle_preference(pref_path) + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive debug logs." + prefs.save_preferences() + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +//Mods +/client/proc/toggle_attack_logs() + set name = "Toggle Attack Logs" + set category = "Preferences" + set desc = "Toggles attack logs." + + var/pref_path = /datum/client_preference/mod/show_attack_logs + + if(check_rights(R_ADMIN|R_MOD)) + toggle_preference(pref_path) + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive attack logs." + prefs.save_preferences() + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 8d1614301f..1fa8af24e4 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -25,21 +25,14 @@ flags_inv = HIDEEARS siemens_coefficient = 0.7 action_button_name = "Toggle Visor" - var/flipped = 0 //Piggybacked from cap flipping. -/obj/item/clothing/head/helmet/riot/dropped() - src.icon_state = initial(icon_state) - src.flipped=0 - ..() - -/obj/item/clothing/head/helmet/riot/attack_self(mob/user) - src.flipped = !src.flipped - if(src.flipped) - icon_state = "[icon_state]up" - user << "You flip the visor up." +/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob) + if(src.icon_state == initial(icon_state)) + src.icon_state = "[icon_state]up" + user << "You raise the visor on the riot helmet." else src.icon_state = initial(icon_state) - user << "You flip the visor down." + user << "You lower the visor on the riot helmet." update_clothing_icon() //so our mob-overlays update /obj/item/clothing/head/helmet/laserproof diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index be9abbf920..4075a6d4b3 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -67,7 +67,7 @@ icon_state = "beret_navy_officer" /obj/item/clothing/head/beret/sec/navy/hos name = "officer beret" - desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety." + desc = "A navy blue beret with a head of security's rank emblem. For officers that are more inclined towards style than safety." icon_state = "beret_navy_hos" /obj/item/clothing/head/beret/sec/navy/warden name = "warden beret" @@ -79,7 +79,7 @@ icon_state = "beret_corporate_officer" /obj/item/clothing/head/beret/sec/corporate/hos name = "officer beret" - desc = "A corporate black beret with a commander's rank emblem. For officers that are more inclined towards style than safety." + desc = "A corporate black beret with a head of security's rank emblem. For officers that are more inclined towards style than safety." icon_state = "beret_corporate_hos" /obj/item/clothing/head/beret/sec/corporate/warden name = "warden beret" @@ -95,11 +95,11 @@ icon_state = "beret_purple" /obj/item/clothing/head/beret/centcom/officer name = "officers beret" - desc = "A black beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces." + desc = "A dark blue beret adorned with a silver patch. Worn by NanoTrasen Officials." icon_state = "beret_centcom_officer" /obj/item/clothing/head/beret/centcom/captain name = "captains beret" - desc = "A white beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces." + desc = "A white beret adorned with a blue patch. Worn by NanoTrasen command staff." icon_state = "beret_centcom_captain" //Medical @@ -123,4 +123,8 @@ /obj/item/clothing/head/surgery/black desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is black." - icon_state = "surgcap_black" \ No newline at end of file + icon_state = "surgcap_black" + +/obj/item/clothing/head/surgery/navyblue + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue." + icon_state = "surgcap_navyblue" \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 17c7cd0666..e9143b4bca 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -273,329 +273,22 @@ icon_state = "orange_bandana" body_parts_covered = 0 -//Hijabs - /obj/item/clothing/head/hijab - name = "black hijab" - desc = "A black veil that is wrapped to cover the head and chest" - icon_state = "hijab_black" + name = "hijab" + desc = "A veil that is wrapped to cover the head and chest" + icon_state = "hijab" body_parts_covered = 0 flags_inv = BLOCKHAIR -/obj/item/clothing/head/hijab/white - name = "white hijab" - desc = "A white veil that is wrapped to cover the head and chest" - icon_state = "hijab_white" - -/obj/item/clothing/head/hijab/aqua - name = "aqua hijab" - desc = "An aqua veil that is wrapped to cover the head and chest" - icon_state = "hijab_aqua" - -/obj/item/clothing/head/hijab/blue - name = "blue hijab" - desc = "A blue veil that is wrapped to cover the head and chest" - icon_state = "hijab_blue" - -/obj/item/clothing/head/hijab/brown - name = "brown hijab" - desc = "A brown veil that is wrapped to cover the head and chest" - icon_state = "hijab_brown" - -/obj/item/clothing/head/hijab/darkblue - name = "bark blue hijab" - desc = "A dark blue veil that is wrapped to cover the head and chest" - icon_state = "hijab_darkblue" - -/obj/item/clothing/head/hijab/darkred - name = "dark red hijab" - desc = "A dark red veil that is wrapped to cover the head and chest" - icon_state = "hijab_darkred" - -/obj/item/clothing/head/hijab/green - name = "green hijab" - desc = "A green veil that is wrapped to cover the head and chest" - icon_state = "hijab_green" - -/obj/item/clothing/head/hijab/grey - name = "grey hijab" - desc = "A grey veil that is wrapped to cover the head and chest" - icon_state = "hijab_grey" - -/obj/item/clothing/head/hijab/lightblue - name = "light blue hijab" - desc = "A light blue veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightblue" - -/obj/item/clothing/head/hijab/lightbrown - name = "light brown hijab" - desc = "A light brown veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightbrown" - -/obj/item/clothing/head/hijab/lightgreen - name = "light green hijab" - desc = "A light green veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightgreen" - -/obj/item/clothing/head/hijab/lightpurple - name = "light purple hijab" - desc = "A light purple veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightpurple" - -/obj/item/clothing/head/hijab/lightred - name = "light red hijab" - desc = "A light red veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightred" - -/obj/item/clothing/head/hijab/maroon - name = "maroon hijab" - desc = "A maroon veil that is wrapped to cover the head and chest" - icon_state = "hijab_maroon" - -/obj/item/clothing/head/hijab/orange - name = "orange hijab" - desc = "An orange veil that is wrapped to cover the head and chest" - icon_state = "hijab_orange" - -/obj/item/clothing/head/hijab/pink - name = "pink hijab" - desc = "A pink veil that is wrapped to cover the head and chest" - icon_state = "hijab_pink" - -/obj/item/clothing/head/hijab/purple - name = "purple hijab" - desc = "A purple veil that is wrapped to cover the head and chest" - icon_state = "hijab_purple" - -/obj/item/clothing/head/hijab/red - name = "red hijab" - desc = "A red veil that is wrapped to cover the head and chest" - icon_state = "hijab_red" - -/obj/item/clothing/head/hijab/yellowgreen - name = "yellow green hijab" - desc = "A yellow green veil that is wrapped to cover the head and chest" - icon_state = "hijab_yellowgreen" - -/obj/item/clothing/head/hijab/yellow - name = "yellow hijab" - desc = "A yellow veil that is wrapped to cover the head and chest" - icon_state = "hijab_yellow" - -//Kippot - /obj/item/clothing/head/kippa - name = "black kippa" - desc = "A small, brimless cap. It is black." - icon_state = "kippa_black" + name = "kippa" + desc = "A small, brimless cap." + icon_state = "kippa" body_parts_covered = 0 -/obj/item/clothing/head/kippa/aqua - name = "aqua kippa" - desc = "A small, brimless cap. It is aqua." - icon_state = "kippa_aqua" - -/obj/item/clothing/head/kippa/blue - name = "blue kippa" - desc = "A small, brimless cap. It is blue." - icon_state = "kippa_blue" - -/obj/item/clothing/head/kippa/brown - name = "brown kippa" - desc = "A small, brimless cap. It is blue." - icon_state = "kippa_brown" - -/obj/item/clothing/head/kippa/darkblue - name = "dark blue kippa" - desc = "A small, brimless cap. It is dark blue." - icon_state = "kippa_darkblue" - -/obj/item/clothing/head/kippa/darkred - name = "dark red kippa" - desc = "A small, brimless cap. It is dark red." - icon_state = "kippa_darkred" - -/obj/item/clothing/head/kippa/green - name = "green kippa" - desc = "A small, brimless cap. It is green." - icon_state = "kippa_green" - -/obj/item/clothing/head/kippa/grey - name = "grey kippa" - desc = "A small, brimless cap. It is grey." - icon_state = "kippa_grey" - -/obj/item/clothing/head/kippa/lightblue - name = "light blue kippa" - desc = "A small, brimless cap. It is light blue." - icon_state = "kippa_lightblue" - -/obj/item/clothing/head/kippa/lightbrown - name = "light brown kippa" - desc = "A small, brimless cap. It is light brown." - icon_state = "kippa_lightbrown" - -/obj/item/clothing/head/kippa/lightgreen - name = "light green kippa" - desc = "A small, brimless cap. It is light green." - icon_state = "kippa_lightgreen" - -/obj/item/clothing/head/kippa/lightpurple - name = "light purple kippa" - desc = "A small, brimless cap. It is light purple." - icon_state = "kippa_lightpurple" - -/obj/item/clothing/head/kippa/lightred - name = "light red kippa" - desc = "A small, brimless cap. It is light red." - icon_state = "kippa_lightred" - -/obj/item/clothing/head/kippa/maroon - name = "maroon kippa" - desc = "A small, brimless cap. It is maroon." - icon_state = "kippa_maroon" - -/obj/item/clothing/head/kippa/orange - name = "orange kippa" - desc = "A small, brimless cap. It is orange." - icon_state = "kippa_orange" - -/obj/item/clothing/head/kippa/pink - name = "pink kippa" - desc = "A small, brimless cap. It is pink." - icon_state = "kippa_pink" - -/obj/item/clothing/head/kippa/purple - name = "purple kippa" - desc = "A small, brimless cap. It is purple." - icon_state = "kippa_purple" - -/obj/item/clothing/head/kippa/red - name = "red kippa" - desc = "A small, brimless cap. It is red." - icon_state = "kippa_red" - -/obj/item/clothing/head/kippa/white - name = "white kippa" - desc = "A small, brimless cap. It is white." - icon_state = "kippa_white" - -/obj/item/clothing/head/kippa/yellowgreen - name = "yellow green kippa" - desc = "A small, brimless cap. It is yellow green." - icon_state = "kippa_yellowgreen" - -/obj/item/clothing/head/kippa/yellow - name = "yellow kippa" - desc = "A small, brimless cap. It is yellow." - icon_state = "kippa_yellow" - -//Turbans - /obj/item/clothing/head/turban - name = "black turban" - desc = "A black cloth used to wind around the head" - icon_state = "turban_black" + name = "turban" + desc = "A cloth used to wind around the head" + icon_state = "turban" body_parts_covered = 0 flags_inv = BLOCKHAIR - -/obj/item/clothing/head/turban/aqua - name = "aqua turban" - desc = "An aqua cloth used to wind around the head." - icon_state = "turban_aqua" - -/obj/item/clothing/head/turban/blue - name = "blue turban" - desc = "A blue cloth used to wind around the head." - icon_state = "turban_blue" - -/obj/item/clothing/head/turban/brown - name = "brown turban" - desc = "A brown cloth used to wind around the head." - icon_state = "turban_brown" - -/obj/item/clothing/head/turban/darkblue - name = "dark blue turban" - desc = "A dark blue cloth used to wind around the head." - icon_state = "turban_darkblue" - -/obj/item/clothing/head/turban/darkred - name = "dark red turban" - desc = "A dark red cloth used to wind around the head." - icon_state = "turban_darkred" - -/obj/item/clothing/head/turban/green - name = "green turban" - desc = "A green cloth used to wind around the head." - icon_state = "turban_green" - -/obj/item/clothing/head/turban/grey - name = "grey turban" - desc = "A grey cloth used to wind around the head." - icon_state = "turban_grey" - -/obj/item/clothing/head/turban/lightblue - name = "light blue turban" - desc = "A light blue cloth used to wind around the head." - icon_state = "turban_lightblue" - -/obj/item/clothing/head/turban/lightbrown - name = "light brown turban" - desc = "A light brown cloth used to wind around the head." - icon_state = "turban_lightbrown" - -/obj/item/clothing/head/turban/lightgreen - name = "light green turban" - desc = "A light green cloth used to wind around the head." - icon_state = "turban_lightgreen" - -/obj/item/clothing/head/turban/lightpurple - name = "light purple turban" - desc = "A light purple cloth used to wind around the head." - icon_state = "turban_lightpurple" - -/obj/item/clothing/head/turban/lightred - name = "light red turban" - desc = "A light red cloth used to wind around the head." - icon_state = "turban_lightred" - -/obj/item/clothing/head/turban/maroon - name = "maroon turban" - desc = "A maroon cloth used to wind around the head." - icon_state = "turban_maroon" - -/obj/item/clothing/head/turban/orange - name = "orange turban" - desc = "An orange cloth used to wind around the head." - icon_state = "turban_orange" - -/obj/item/clothing/head/turban/pink - name = "pink turban" - desc = "A pink cloth used to wind around the head." - icon_state = "turban_pink" - -/obj/item/clothing/head/turban/purple - name = "purple turban" - desc = "A purple cloth used to wind around the head." - icon_state = "turban_purple" - -/obj/item/clothing/head/turban/red - name = "red turban" - desc = "A red cloth used to wind around the head." - icon_state = "turban_red" - -/obj/item/clothing/head/turban/white - name = "white turban" - desc = "A white cloth used to wind around the head." - icon_state = "turban_white" - -/obj/item/clothing/head/turban/yellowgreen - name = "yellow green turban" - desc = "A yellow green cloth used to wind around the head." - icon_state = "turban_yellowgreen" - -/obj/item/clothing/head/turban/yellow - name = "yellow turban" - desc = "A yellow cloth used to wind around the head." - icon_state = "turban_yellow" - diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm index 38cfc4a84b..e99dc6d8ce 100644 --- a/code/modules/clothing/spacesuits/captain.dm +++ b/code/modules/clothing/spacesuits/captain.dm @@ -15,7 +15,7 @@ desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!" icon_state = "caparmor" item_state = "capspacesuit" - w_class = 4 + w_class = 5 gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 item_flags = STOPPRESSUREDAMAGE diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index f123f17b55..7db3dd1dc1 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -14,7 +14,7 @@ slot_flags = SLOT_BACK req_one_access = list() req_access = list() - w_class = 4 + w_class = 5 // These values are passed on to all component pieces. armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 7014e9cf41..ecac722204 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -51,7 +51,7 @@ desc = "A suit that protects against low pressure environments. \"NORTHERN STAR\" is written in large block letters on the back." icon_state = "space" item_state = "s_suit" - w_class = 4//bulky item + w_class = 5 // So you can't fit this in your bag and be prepared at all times. gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index f98f222b93..bfcde568e9 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -143,6 +143,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) slowdown = 1 + w_class = 5 armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS @@ -291,7 +292,7 @@ icon_nobadge = "wardenvest_nobadge" /obj/item/clothing/suit/storage/vest/hos - name = "commander armor vest" + name = "head of security armor vest" desc = "A simple kevlar plate carrier. This one has a gold badge clipped to the chest." icon_state = "hosvest_nobadge" item_state = "hosvest_nobadge" @@ -339,7 +340,7 @@ icon_nobadge = "wardenwebvest_nobadge" /obj/item/clothing/suit/storage/vest/heavy/hos - name = "commander heavy armor vest" + name = "head of security heavy armor vest" desc = "A heavy kevlar plate carrier with webbing attached. This one has a gold badge clipped to the chest." icon_state = "hoswebvest_nobadge" item_state = "hoswebvest_nobadge" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 9456a2cbde..cb7db44932 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -343,12 +343,36 @@ icon_state = "blueponcho" item_state = "blueponcho" -/obj/item/clothing/suit/poncho/security +/obj/item/clothing/suit/poncho/roles/security name = "security poncho" desc = "A simple, comfortable cloak without sleeves. This one is black and red, standard NanoTrasen Security colors." icon_state = "secponcho" item_state = "secponcho" +/obj/item/clothing/suit/poncho/roles/medical + name = "medical poncho" + desc = "A simple, comfortable cloak without sleeves. This one is white with green and blue tint, standard Medical colors." + icon_state = "medponcho" + item_state = "medponcho" + +/obj/item/clothing/suit/poncho/roles/engineering + name = "engineering poncho" + desc = "A simple, comfortable cloak without sleeves. This one is yellow and orange, standard Engineering colors." + icon_state = "engiponcho" + item_state = "engiponcho" + +/obj/item/clothing/suit/poncho/roles/science + name = "science poncho" + desc = "A simple, comfortable cloak without sleeves. This one is white with purple trim, standard NanoTrasen Science colors." + icon_state = "sciponcho" + item_state = "sciponcho" + +/obj/item/clothing/suit/poncho/roles/cargo + name = "cargo poncho" + desc = "A simple, comfortable cloak without sleeves. This one is tan and grey, the colors of Cargo." + icon_state = "cargoponcho" + item_state = "cargoponcho" + /obj/item/clothing/suit/jacket/puffer name = "puffer jacket" desc = "A thick jacket with a rubbery, water-resistant shell." @@ -486,7 +510,7 @@ /obj/item/clothing/suit/storage/toggle/hoodie/cti name = "CTI hoodie" - desc = "A warm, black sweatshirt. It bears the letters ‘CTI’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." + desc = "A warm, black sweatshirt. It bears the letters ‘CTIÂ’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." icon_state = "cti_hoodie" item_state = "cti_hoodie" icon_open = "cti_hoodie_open" @@ -494,7 +518,7 @@ /obj/item/clothing/suit/storage/toggle/hoodie/mu name = "mars university hoodie" - desc = "A warm, gray sweatshirt. It bears the letters ‘MU’ on the front, a lettering to the well-known public college, Mars University." + desc = "A warm, gray sweatshirt. It bears the letters ‘MUÂ’ on the front, a lettering to the well-known public college, Mars University." icon_state = "mu_hoodie" item_state = "mu_hoodie" icon_open = "mu_hoodie_open" @@ -631,4 +655,4 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/miner name = "mining winter coat" icon_state = "coatminer" - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) \ No newline at end of file + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index e0cbb20ced..2534845173 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -4,7 +4,6 @@ /obj/item/clothing/suit/storage/New() ..() pockets = new/obj/item/weapon/storage/internal(src) - pockets.storage_slots = 2 //two slots pockets.max_w_class = 2 //fit only pocket sized items pockets.max_storage_space = 4 @@ -77,7 +76,6 @@ /obj/item/clothing/suit/storage/vest/heavy/New() ..() pockets = new/obj/item/weapon/storage/internal(src) - pockets.storage_slots = 4 pockets.max_w_class = 2 pockets.max_storage_space = 8 diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 2342010ce6..0e9a004a2e 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -12,7 +12,8 @@ /obj/item/clothing/accessory/storage/New() ..() hold = new/obj/item/weapon/storage/internal(src) - hold.storage_slots = slots + hold.max_storage_space = slots * 2 + hold.max_w_class = 2 /obj/item/clothing/accessory/storage/attack_hand(mob/user as mob) if (has_suit) //if we are part of a suit @@ -61,6 +62,12 @@ icon_state = "vest_brown" slots = 5 +/obj/item/clothing/accessory/storage/white_vest + name = "white webbing vest" + desc = "Durable white synthcotton vest with lots of pockets to carry essentials." + icon_state = "vest_white" + slots = 5 + /obj/item/clothing/accessory/storage/knifeharness name = "decorated harness" desc = "A heavily decorated harness of sinew and leather with two knife-loops." diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index ca2b9f0d99..c852147ba3 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -12,6 +12,13 @@ item_state = "bl_suit" worn_state = "blackf" +/obj/item/clothing/under/color/blackjumpskirt + name = "black jumpskirt" + desc = "A black jumpskirt, Sol size 0." + icon_state = "blackjumpskirt" + item_state = "bl_suit" + worn_state = "blackjumpskirt" + /obj/item/clothing/under/color/blue name = "blue jumpsuit" icon_state = "blue" @@ -78,89 +85,89 @@ item_state = "psyche" worn_state = "psyche" -/obj/item/clothing/under/lightblue +/obj/item/clothing/under/color/lightblue name = "lightblue jumpsuit" - desc = "lightblue" + desc = "A light blue jumpsuit." icon_state = "lightblue" item_state = "b_suit" worn_state = "lightblue" rolled_sleeves = 0 -/obj/item/clothing/under/aqua +/obj/item/clothing/under/color/aqua name = "aqua jumpsuit" - desc = "aqua" + desc = "An aqua jumpsuit." icon_state = "aqua" item_state = "b_suit" worn_state = "aqua" rolled_sleeves = 0 -/obj/item/clothing/under/purple +/obj/item/clothing/under/color name = "purple jumpsuit" - desc = "purple" + desc = "The latest in space fashion." icon_state = "purple" item_state = "p_suit" worn_state = "purple" rolled_sleeves = 0 -/obj/item/clothing/under/lightpurple +/obj/item/clothing/under/color/lightpurple name = "lightpurple jumpsuit" - desc = "lightpurple" + desc = "A light purple jumpsuit." icon_state = "lightpurple" item_state = "p_suit" worn_state = "lightpurple" rolled_sleeves = 0 -/obj/item/clothing/under/lightgreen +/obj/item/clothing/under/color/lightgreen name = "lightgreen jumpsuit" - desc = "lightgreen" + desc = "A light green jumpsuit." icon_state = "lightgreen" item_state = "g_suit" worn_state = "lightgreen" rolled_sleeves = 0 -/obj/item/clothing/under/lightbrown +/obj/item/clothing/under/color/lightbrown name = "lightbrown jumpsuit" - desc = "lightbrown" + desc = "A light brown jumpsuit." icon_state = "lightbrown" item_state = "lb_suit" worn_state = "lightbrown" rolled_sleeves = 0 -/obj/item/clothing/under/brown +/obj/item/clothing/under/color/brown name = "brown jumpsuit" - desc = "brown" + desc = "A brown jumpsuit." icon_state = "brown" item_state = "lb_suit" worn_state = "brown" rolled_sleeves = 0 -/obj/item/clothing/under/yellowgreen +/obj/item/clothing/under/color/yellowgreen name = "yellowgreen jumpsuit" - desc = "yellowgreen" + desc = "A... yellow green jumpsuit?" icon_state = "yellowgreen" item_state = "y_suit" worn_state = "yellowgreen" rolled_sleeves = 0 -/obj/item/clothing/under/darkblue +/obj/item/clothing/under/color/darkblue name = "darkblue jumpsuit" - desc = "darkblue" + desc = "A dark blue jumpsuit." icon_state = "darkblue" item_state = "b_suit" worn_state = "darkblue" rolled_sleeves = 0 -/obj/item/clothing/under/lightred +/obj/item/clothing/under/color/lightred name = "lightred jumpsuit" - desc = "lightred" + desc = "A light red jumpsuit." icon_state = "lightred" item_state = "r_suit" worn_state = "lightred" rolled_sleeves = 0 -/obj/item/clothing/under/darkred +/obj/item/clothing/under/color/darkred name = "darkred jumpsuit" - desc = "darkred" + desc = "A dark red jumpsuit." icon_state = "darkred" item_state = "r_suit" worn_state = "darkred" diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 057733298e..4b212331be 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -204,6 +204,14 @@ worn_state = "scrubsblack" rolled_sleeves = -1 +/obj/item/clothing/under/rank/medical/navyblue + name = "medical scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue." + icon_state = "scrubsnavyblue" + item_state = "b_suit" + worn_state = "scrubsnavyblue" + rolled_sleeves = -1 + /obj/item/clothing/under/rank/psych desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." name = "psychiatrist's jumpsuit" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 5b263604cb..91ade60b71 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -140,9 +140,9 @@ worn_state = "johnny" item_state = "johnny" -/obj/item/clothing/under/rainbow - name = "rainbow" - desc = "rainbow" +/obj/item/clothing/under/color/rainbow + name = "rainbow jumpsuit" + desc = "A multi-colored jumpsuit." icon_state = "rainbow" item_state = "rainbow" worn_state = "rainbow" @@ -482,13 +482,6 @@ worn_state = "sundress_white" body_parts_covered = UPPER_TORSO|LOWER_TORSO -/obj/item/clothing/under/blackjumpskirt - name = "black jumpskirt" - desc = "A black jumpskirt, Sol size 0." - icon_state = "blackjumpskirt" - item_state = "bl_suit" - worn_state = "blackjumpskirt" - /obj/item/clothing/under/captainformal name = "captain's formal uniform" desc = "A captain's formal-wear, for special occasions." diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 975cf6c4ae..f3c38cc433 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -1,4 +1,7 @@ /obj/item/clothing/under/pants + name = "jeans" + desc = "A nondescript pair of tough blue jeans." + icon_state = "jeans" gender = PLURAL body_parts_covered = LOWER_TORSO|LEGS @@ -17,6 +20,11 @@ desc = "Only for those who can pull it off." icon_state = "jeansblack" +/obj/item/clothing/under/pants/greyjeans + name = "grey jeans" + desc = "Only for those who can pull it off." + icon_state = "jeansgrey" + /obj/item/clothing/under/pants/youngfolksjeans name = "Young Folks jeans" desc = "For those tired of boring old jeans. Relive the passion of your youth!" @@ -47,11 +55,6 @@ desc = "A pair of track pants, for the athletic." icon_state = "trackpants" -/obj/item/clothing/under/pants/jeans - name = "jeans" - desc = "A nondescript pair of tough blue jeans." - icon_state = "jeans" - /obj/item/clothing/under/pants/khaki name = "khaki pants" desc = "A pair of dust beige khaki pants." diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 4ad336aa26..1d792bcc10 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -36,6 +36,7 @@ worn_state = "jeans_shorts" /obj/item/clothing/under/shorts/jeans/female + name = "jeans short shorts" icon_state = "jeans_shorts_f" worn_state = "jeans_shorts_f" @@ -45,6 +46,7 @@ worn_state = "jeansclassic_shorts" /obj/item/clothing/under/shorts/jeans/classic/female + name = "classic jeans short shorts" icon_state = "jeansclassic_shorts_f" worn_state = "jeansclassic_shorts_f" @@ -54,6 +56,7 @@ worn_state = "jeansmustang_shorts" /obj/item/clothing/under/shorts/jeans/mustang/female + name = "mustang jeans short shorts" icon_state = "jeansmustang_shorts_f" worn_state = "jeansmustang_shorts_f" @@ -63,6 +66,7 @@ worn_state = "jeansyoungfolks_shorts" /obj/item/clothing/under/shorts/jeans/youngfolks/female + name = "young folks jeans short shorts" icon_state = "jeansyoungfolks_shorts_f" worn_state = "jeansyoungfolks_shorts_f" @@ -72,9 +76,20 @@ worn_state = "blackpants_shorts" /obj/item/clothing/under/shorts/jeans/black/female + name = "black jeans short shorts" icon_state = "black_shorts_f" worn_state = "black_shorts_f" +/obj/item/clothing/under/shorts/jeans/grey + name = "grey jeans shorts" + icon_state = "greypants_shorts" + worn_state = "greypants_shorts" + +/obj/item/clothing/under/shorts/jeans/grey/female + name = "grey jeans short shorts" + icon_state = "grey_shorts_f" + worn_state = "grey_shorts_f" + /obj/item/clothing/under/shorts/khaki name = "khaki shorts" desc = "For that island getaway. It's five o'clock somewhere, right?" @@ -82,5 +97,6 @@ worn_state = "tanpants_shorts" /obj/item/clothing/under/shorts/khaki/female + name = "khaki short shorts" icon_state = "khaki_shorts_f" worn_state = "khaki_shorts_f" diff --git a/code/modules/detectivework/tools/storage.dm b/code/modules/detectivework/tools/storage.dm index e0cdabaafd..9c45028e93 100644 --- a/code/modules/detectivework/tools/storage.dm +++ b/code/modules/detectivework/tools/storage.dm @@ -8,16 +8,18 @@ /obj/item/weapon/storage/box/swabs/New() ..() - for(var/i=0;i max_frustration * target_speed) + handleFrustrated(1) + else + resetTarget() + lookForTargets() + if(will_patrol && !pulledby && !target) + if(patrol_path.len) + for(var/i = 1 to patrol_speed) + handlePatrol() + if(i < patrol_speed) + sleep(20 / patrol_speed) + if(max_frustration && frustration > max_frustration * patrol_speed) + handleFrustrated(0) + else + startPatrol() + else + handleIdle() + +/mob/living/bot/proc/handleRegular() + return + +/mob/living/bot/proc/handleAdjacentTarget() + return + +/mob/living/bot/proc/handleRangedTarget() + return + +/mob/living/bot/proc/stepToTarget() + if(!target || !target.loc) + return + if(get_dist(src, target) > min_target_dist) + if(!target_path.len || get_turf(target) != target_path[target_path.len]) + calcTargetPath() + if(makeStep(target_path)) + frustration = 0 + else if(max_frustration) + ++frustration + return + +/mob/living/bot/proc/handleFrustrated(var/targ) + obstacle = targ ? target_path[1] : patrol_path[1] + target_path = list() + patrol_path = list() + return + +/mob/living/bot/proc/lookForTargets() + return + +/mob/living/bot/proc/confirmTarget(var/atom/A) + if(A.invisibility >= INVISIBILITY_LEVEL_ONE) + return 0 + if(A in ignore_list) + return 0 + if(!A.loc) + return 0 + return 1 + +/mob/living/bot/proc/handlePatrol() + makeStep(patrol_path) + return + +/mob/living/bot/proc/startPatrol() + var/turf/T = getPatrolTurf() + if(T) + patrol_path = AStar(get_turf(loc), T, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_patrol_dist, id = botcard, exclude = obstacle) + if(!patrol_path) + patrol_path = list() + obstacle = null + return + +/mob/living/bot/proc/getPatrolTurf() + return null + +/mob/living/bot/proc/handleIdle() + return + +/mob/living/bot/proc/calcTargetPath() + target_path = AStar(get_turf(loc), get_turf(target), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard, exclude = obstacle) + if(!target_path) + if(target && target.loc) + ignore_list |= target + resetTarget() + obstacle = null + return + +/mob/living/bot/proc/makeStep(var/list/path) + if(!path.len) + return 0 + var/turf/T = path[1] + if(get_turf(src) == T) + path -= T + return makeStep(path) + + return step_towards(src, T) + +/mob/living/bot/proc/resetTarget() + target = null + target_path = list() + frustration = 0 + obstacle = null + /mob/living/bot/proc/turn_on() if(stat) return 0 @@ -121,6 +261,9 @@ on = 0 set_light(0) update_icons() + resetTarget() + patrol_path = list() + ignore_list = list() /mob/living/bot/proc/explode() qdel(src) @@ -141,7 +284,7 @@ // for(var/turf/simulated/t in oview(src,1)) for(var/d in cardinal) - var/turf/simulated/T = get_step(src, d) + var/turf/T = get_step(src, d) if(istype(T) && !T.density) if(!LinkBlockedWithAccess(src, T, ID)) L.Add(T) diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index 30b1c0a47b..60a431aad3 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -6,18 +6,8 @@ botcard_access = list(access_janitor, access_maint_tunnels) locked = 0 // Start unlocked so roboticist can set them to patrol. - - var/obj/effect/decal/cleanable/target - var/list/path = list() - var/list/patrol_path = list() - var/list/ignorelist = list() - - var/obj/cleanbot_listener/listener = null - var/beacon_freq = 1445 // navigation beacon frequency - var/signal_sent = 0 - var/closest_dist - var/next_dest - var/next_dest_loc + wait_if_pulled = 1 + min_target_dist = 0 var/cleaning = 0 var/screwloose = 0 @@ -26,48 +16,11 @@ var/blood = 1 var/list/target_types = list() - var/maximum_search_range = 7 - /mob/living/bot/cleanbot/New() ..() get_targets() - listener = new /obj/cleanbot_listener(src) - listener.cleanbot = src - - if(radio_controller) - radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) - -/mob/living/bot/cleanbot/proc/handle_target() - if(loc == target.loc) - if(!cleaning) - UnarmedAttack(target) - return 1 - if(!path.len) -// spawn(0) - path = AStar(loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - custom_emote(2, "[src] can't reach the target and is giving up.") - target = null - path = list() - return - if(path.len) - step_to(src, path[1]) - path -= path[1] - return 1 - return - -/mob/living/bot/cleanbot/Life() - ..() - - if(!on) - return - - if(client) - return - if(cleaning) - return - +/mob/living/bot/cleanbot/handleIdle() if(!screwloose && !oddbutton && prob(5)) custom_emote(2, "makes an excited beeping booping sound!") @@ -79,68 +32,27 @@ if(oddbutton && prob(5)) // Make a big mess visible_message("Something flies out of [src]. He seems to be acting oddly.") var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(loc) - ignorelist += gib + ignore_list += gib spawn(600) - ignorelist -= gib + ignore_list -= gib - // Find a target - - if(pulledby) // Don't wiggle if someone pulls you - patrol_path = list() - return - - var/found_spot - search_loop: - for(var/i=0, i <= maximum_search_range, i++) - for(var/obj/effect/decal/cleanable/D in view(i, src)) - if(D in ignorelist) - continue - for(var/T in target_types) - if(istype(D, T)) - patrol_path = list() - target = D - found_spot = handle_target() - if (found_spot) - break search_loop - else - target = null - continue // no need to check the other types - - - if(!found_spot && !target) // No targets in range - if(!patrol_path || !patrol_path.len) - if(!signal_sent || signal_sent > world.time + 200) // Waited enough or didn't send yet - var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq) - if(!frequency) - return - - closest_dist = 9999 - next_dest = null - next_dest_loc = null - - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = 1 - signal.data = list("findbeakon" = "patrol") - frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS) - signal_sent = world.time - else - if(next_dest) - next_dest_loc = listener.memorized[next_dest] - if(next_dest_loc) - patrol_path = AStar(loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id = botcard, exclude = null) - signal_sent = 0 - else - if(pulledby) // Don't wiggle if someone pulls you - patrol_path = list() - return - if(patrol_path[1] == loc) - patrol_path -= patrol_path[1] - var/moved = step_towards(src, patrol_path[1]) - if(moved) - patrol_path -= patrol_path[1] +/mob/living/bot/cleanbot/lookForTargets() + for(var/obj/effect/decal/cleanable/D in view(world.view, src)) // There was some odd code to make it start with nearest decals, it's unnecessary, this works + if(confirmTarget(D)) + target = D + return +/mob/living/bot/cleanbot/confirmTarget(var/obj/effect/decal/cleanable/D) + if(!..()) + return 0 + for(var/T in target_types) + if(istype(D, T)) + return 1 + return 0 +/mob/living/bot/cleanbot/handleAdjacentTarget() + if(get_turf(target) == src.loc) + UnarmedAttack(target) /mob/living/bot/cleanbot/UnarmedAttack(var/obj/effect/decal/cleanable/D, var/proximity) if(!..()) @@ -152,7 +64,7 @@ if(D.loc != loc) return - cleaning = 1 + busy = 1 custom_emote(2, "begins to clean up \the [D]") update_icons() var/cleantime = istype(D, /obj/effect/decal/cleanable/dirt) ? 10 : 50 @@ -165,7 +77,7 @@ qdel(D) if(D == target) target = null - cleaning = 0 + busy = 0 update_icons() /mob/living/bot/cleanbot/explode() @@ -185,17 +97,11 @@ return /mob/living/bot/cleanbot/update_icons() - if(cleaning) + if(busy) icon_state = "cleanbot-c" else icon_state = "cleanbot[on]" -/mob/living/bot/cleanbot/turn_off() - ..() - target = null - path = list() - patrol_path = list() - /mob/living/bot/cleanbot/attack_hand(var/mob/user) var/dat dat += "Automatic Station Cleaner v1.0

" @@ -230,10 +136,6 @@ if("patrol") should_patrol = !should_patrol patrol_path = null - if("freq") - var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10 - if (freq > 0) - beacon_freq = freq if("screw") screwloose = !screwloose usr << "You twiddle the screw." @@ -264,25 +166,6 @@ if(blood) target_types += /obj/effect/decal/cleanable/blood -/* Radio object that listens to signals */ - -/obj/cleanbot_listener - var/mob/living/bot/cleanbot/cleanbot = null - var/list/memorized = list() - -/obj/cleanbot_listener/receive_signal(var/datum/signal/signal) - var/recv = signal.data["beacon"] - var/valid = signal.data["patrol"] - if(!recv || !valid || !cleanbot) - return - - var/dist = get_dist(cleanbot, signal.source.loc) - memorized[recv] = signal.source.loc - - if(dist < cleanbot.closest_dist) // We check all signals, choosing the closest beakon; then we move to the NEXT one after the closest one - cleanbot.closest_dist = dist - cleanbot.next_dest = signal.data["next_patrol"] - /* Assembly */ /obj/item/weapon/bucket_sensor diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm index 507e63c4ab..3c50432025 100644 --- a/code/modules/mob/living/bot/ed209bot.dm +++ b/code/modules/mob/living/bot/ed209bot.dm @@ -7,7 +7,6 @@ health = 100 maxHealth = 100 - bot_version = "2.5" is_ranged = 1 preparing_arrest_sounds = new() @@ -20,7 +19,7 @@ var/last_shot = 0 /mob/living/bot/secbot/ed209/update_icons() - if(on && is_attacking) + if(on && busy) icon_state = "ed209-c" else icon_state = "ed209[on]" @@ -50,6 +49,9 @@ new /obj/effect/decal/cleanable/blood/oil(Tsec) qdel(src) +/mob/living/bot/secbot/ed209/handleRangedTarget() + RangedAttack(target) + /mob/living/bot/secbot/ed209/RangedAttack(var/atom/A) if(last_shot + shot_delay > world.time) src << "You are not ready to fire yet!" diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index d8e0498e6e..1187d16b5f 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -22,17 +22,12 @@ var/obj/structure/reagent_dispensers/watertank/tank - var/attacking = 0 - var/list/path = list() - var/atom/target - var/frustration = 0 - -/mob/living/bot/farmbot/New() - ..() - spawn(5) - tank = locate() in contents - if(!tank) - tank = new /obj/structure/reagent_dispensers/watertank(src) +/mob/living/bot/farmbot/New(var/newloc, var/newTank) + ..(newloc) + if(!newTank) + newTank = new /obj/structure/reagent_dispensers/watertank(src) + tank = newTank + tank.forceMove(src) /mob/living/bot/farmbot/attack_hand(var/mob/user as mob) . = ..() @@ -110,63 +105,55 @@ else icon_state = "farmbot[on]" -/mob/living/bot/farmbot/Life() - ..() - if(!on) - return +/mob/living/bot/farmbot/handleRegular() if(emagged && prob(1)) flick("farmbot_broke", src) - if(client) - return - if(target) - if(Adjacent(target)) - UnarmedAttack(target) - path = list() - target = null - else - if(path.len && frustration < 5) - if(path[1] == loc) - path -= path[1] - var/t = step_towards(src, path[1]) - if(t) - path -= path[1] - else - ++frustration - else - path = list() - target = null +/mob/living/bot/farmbot/handleAdjacentTarget() + UnarmedAttack(target) + +/mob/living/bot/farmbot/lookForTargets() + if(emagged) + for(var/mob/living/carbon/human/H in view(7, src)) + target = H + return else - if(emagged) - for(var/mob/living/carbon/human/H in view(7, src)) - target = H - break - else - for(var/obj/machinery/portable_atmospherics/hydroponics/tray in view(7, src)) - if(process_tray(tray)) - target = tray - frustration = 0 - break - if(!target && refills_water && tank && tank.reagents.total_volume < tank.reagents.maximum_volume) - for(var/obj/structure/sink/source in view(7, src)) - target = source - frustration = 0 - break - if(target) - var/t = get_dir(target, src) // Turf with the tray is impassable, so a* can't navigate directly to it - path = AStar(loc, get_step(target, t), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - path = list() + for(var/obj/machinery/portable_atmospherics/hydroponics/tray in view(7, src)) + if(confirmTarget(tray)) + target = tray + return + if(!target && refills_water && tank && tank.reagents.total_volume < tank.reagents.maximum_volume) + for(var/obj/structure/sink/source in view(7, src)) + target = source + return + +/mob/living/bot/farmbot/calcTargetPath() // We need to land NEXT to the tray, because the tray itself is impassable + for(var/trayDir in list(NORTH, SOUTH, EAST, WEST)) + target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard) + if(target_path) + break + if(!target_path) + ignore_list |= target + target = null + target_path = list() + return + +/mob/living/bot/farmbot/stepToTarget() // Same reason + var/turf/T = get_turf(target) + if(!target_path.len || !T.Adjacent(target_path[target_path.len])) + calcTargetPath() + makeStep(target_path) + return /mob/living/bot/farmbot/UnarmedAttack(var/atom/A, var/proximity) if(!..()) return - if(attacking) + if(busy) return if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) var/obj/machinery/portable_atmospherics/hydroponics/T = A - var/t = process_tray(T) + var/t = confirmTarget(T) switch(t) if(0) return @@ -174,7 +161,7 @@ action = "water" // Needs a better one update_icons() visible_message("[src] starts [T.dead? "removing the plant from" : "harvesting"] \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) visible_message("[src] [T.dead? "removes the plant from" : "harvests"] \the [A].") T.attack_hand(src) @@ -182,7 +169,7 @@ action = "water" update_icons() visible_message("[src] starts watering \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) visible_message("[src] waters \the [A].") @@ -191,7 +178,7 @@ action = "hoe" update_icons() visible_message("[src] starts uprooting the weeds in \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) visible_message("[src] uproots the weeds in \the [A].") T.weedlevel = 0 @@ -199,11 +186,11 @@ action = "fertile" update_icons() visible_message("[src] starts fertilizing \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) - visible_message("[src] waters \the [A].") + visible_message("[src] fertilizes \the [A].") T.reagents.add_reagent("ammonia", 10) - attacking = 0 + busy = 0 action = "" update_icons() T.update_icon() @@ -213,20 +200,20 @@ action = "water" update_icons() visible_message("[src] starts refilling its tank from \the [A].") - attacking = 1 + busy = 1 while(do_after(src, 10) && tank.reagents.total_volume < tank.reagents.maximum_volume) tank.reagents.add_reagent("water", 10) if(prob(5)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - attacking = 0 + busy = 0 action = "" update_icons() visible_message("[src] finishes refilling its tank.") else if(emagged && ishuman(A)) var/action = pick("weed", "water") - attacking = 1 + busy = 1 spawn(50) // Some delay - attacking = 0 + busy = 0 switch(action) if("weed") flick("farmbot_hoe", src) @@ -238,7 +225,8 @@ A.attack_generic(src, 5, t) if("water") flick("farmbot_water", src) - visible_message("[src] splashes [A] with water!") // That's it. RP effect. + visible_message("[src] splashes [A] with water!") + tank.reagents.splash(A, 100) /mob/living/bot/farmbot/explode() visible_message("[src] blows apart!") @@ -261,8 +249,22 @@ qdel(src) return -/mob/living/bot/farmbot/proc/process_tray(var/obj/machinery/portable_atmospherics/hydroponics/tray) - if(!tray || !istype(tray)) +/mob/living/bot/farmbot/confirmTarget(var/atom/targ) + if(!..()) + return 0 + + if(emagged && ishuman(targ)) + if(targ in view(world.view, src)) + return 1 + return 0 + + if(istype(targ, /obj/structure/sink)) + if(!tank || tank.reagents.total_volume >= tank.reagents.maximum_volume) + return 0 + return 1 + + var/obj/machinery/portable_atmospherics/hydroponics/tray = targ + if(!istype(tray)) return 0 if(tray.closed_system || !tray.seed) @@ -291,28 +293,28 @@ icon_state = "water_arm" var/build_step = 0 var/created_name = "Farmbot" + var/obj/tank w_class = 3.0 - New() - ..() - spawn(4) // If an admin spawned it, it won't have a watertank it, so lets make one for em! - var tank = locate(/obj/structure/reagent_dispensers/watertank) in contents - if(!tank) - new /obj/structure/reagent_dispensers/watertank(src) - +/obj/item/weapon/farmbot_arm_assembly/New(var/newloc, var/theTank) + ..(newloc) + if(!theTank) // If an admin spawned it, it won't have a watertank it, so lets make one for em! + tank = new /obj/structure/reagent_dispensers/watertank(src) + else + tank = theTank + tank.forceMove(src) /obj/structure/reagent_dispensers/watertank/attackby(var/obj/item/robot_parts/S, mob/user as mob) if ((!istype(S, /obj/item/robot_parts/l_arm)) && (!istype(S, /obj/item/robot_parts/r_arm))) ..() return - var/obj/item/weapon/farmbot_arm_assembly/A = new /obj/item/weapon/farmbot_arm_assembly(loc) - user << "You add the robot arm to [src]." - loc = A //Place the water tank into the assembly, it will be needed for the finished bot user.drop_from_inventory(S) qdel(S) + new /obj/item/weapon/farmbot_arm_assembly(loc, src) + /obj/item/weapon/farmbot_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() if((istype(W, /obj/item/device/analyzer/plant_analyzer)) && (build_step == 0)) @@ -339,10 +341,7 @@ else if((isprox(W)) && (build_step == 3)) build_step++ user << "You complete the Farmbot! Beep boop." - var/mob/living/bot/farmbot/S = new /mob/living/bot/farmbot(get_turf(src)) - for(var/obj/structure/reagent_dispensers/watertank/wTank in contents) - wTank.loc = S - S.tank = wTank + var/mob/living/bot/farmbot/S = new /mob/living/bot/farmbot(get_turf(src), tank) S.name = created_name user.remove_from_mob(W) qdel(W) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 783af91c65..cb29717886 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -3,22 +3,20 @@ desc = "A little floor repairing robot, he looks so excited!" icon_state = "floorbot0" req_access = list(access_construction) + wait_if_pulled = 1 + min_target_dist = 0 var/amount = 10 // 1 for tile, 2 for lattice var/maxAmount = 60 var/tilemake = 0 // When it reaches 100, bot makes a tile - var/repairing = 0 var/improvefloors = 0 var/eattiles = 0 var/maketiles = 0 var/targetdirection = null - var/list/path = list() - var/list/ignorelist = list() - var/turf/target var/floor_build_type = /decl/flooring/tiling // Basic steel floor. /mob/living/bot/floorbot/update_icons() - if(repairing) + if(busy) icon_state = "floorbot-c" else if(amount > 0) icon_state = "floorbot[on]" @@ -31,7 +29,7 @@ dat += "Automatic Station Floor Repairer v1.0

" dat += "Status: [src.on ? "On" : "Off"]
" dat += "Maintenance panel is [open ? "opened" : "closed"]
" - //dat += "Tiles left: [amount]
" + dat += "Tiles left: [amount]
" dat += "Behvaiour controls are [locked ? "locked" : "unlocked"]
" if(!locked || issilicon(user)) dat += "Improves floors: [improvefloors ? "Yes" : "No"]
" @@ -89,100 +87,90 @@ targetdirection = null attack_hand(usr) -/mob/living/bot/floorbot/turn_off() - ..() - target = null - path = list() - ignorelist = list() - -/mob/living/bot/floorbot/Life() - ..() - - if(!on) - return - +/mob/living/bot/floorbot/handleRegular() ++tilemake if(tilemake >= 100) tilemake = 0 addTiles(1) - if(client) - return - - if(prob(5)) + if(prob(1)) custom_emote(2, "makes an excited booping beeping sound!") - if(ignorelist.len) // Don't stick forever - for(var/T in ignorelist) - if(prob(1)) - ignorelist -= T - - if(amount && !emagged) - if(!target && targetdirection) // Building a bridge - var/turf/T = get_step(src, targetdirection) - while(T in range(src)) - if(istype(T, /turf/space)) - target = T - break - T = get_step(T, targetdirection) - - if(!target) // Fixing floors - for(var/turf/T in view(src)) - if(T.loc.name == "Space") - continue - if(T in ignorelist) - continue - if(istype(T, /turf/space)) - if(get_turf(T) == loc || prob(40)) // So they target the same tile all the time - target = T - if(improvefloors && istype(T, /turf/simulated/floor)) - var/turf/simulated/floor/F = T - if(!F.flooring && (get_turf(T) == loc || prob(40))) - target = T - - if(emagged) // Time to griff - for(var/turf/simulated/floor/D in view(src)) - if(D.loc.name == "Space") - continue - if(D in ignorelist) - continue - target = D - break - - if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles - if(eattiles) - for(var/obj/item/stack/tile/floor/T in view(src)) - if(T in ignorelist) - continue - target = T - break - if(maketiles && !target) - for(var/obj/item/stack/material/steel/T in view(src)) - if(T in ignorelist) - continue - target = T - break - - if(target && get_turf(target) == loc) +/mob/living/bot/floorbot/handleAdjacentTarget() + if(get_turf(target) == src.loc) UnarmedAttack(target) - if(target && get_turf(target) != loc && !path.len) - spawn(0) - path = AStar(loc, get_turf(target), /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - path = list() - ignorelist += target - target = null +/mob/living/bot/floorbot/lookForTargets() + if(emagged) // Time to griff + for(var/turf/simulated/floor/D in view(src)) + if(confirmTarget(D)) + target = D + return - if(path.len) - step_to(src, path[1]) - path -= path[1] + else if(amount) + if(targetdirection) // Building a bridge + var/turf/T = get_step(src, targetdirection) + while(T in range(world.view, src)) + if(confirmTarget(T)) + target = T + return + T = get_step(T, targetdirection) + + else // Fixing floors + for(var/turf/space/T in view(src)) // Breaches are of higher priority + if(confirmTarget(T)) + target = T + return + + for(var/turf/simulated/mineral/floor/T in view(src)) // Asteroids are of smaller priority + if(confirmTarget(T)) + target = T + return + + if(improvefloors) + for(var/turf/simulated/floor/T in view(src)) + if(confirmTarget(T)) + target = T + return + + if(amount < maxAmount && (eattiles || maketiles)) + for(var/obj/item/stack/S in view(src)) + if(confirmTarget(S)) + target = S + return + +/mob/living/bot/floorbot/confirmTarget(var/atom/A) // The fact that we do some checks twice may seem confusing but remember that the bot's settings may be toggled while it's moving and we want them to stop in that case + if(!..()) + return 0 + + if(istype(A, /obj/item/stack/tile/floor)) + return (amount < maxAmount && eattiles) + if(istype(A, /obj/item/stack/material/steel)) + return (amount < maxAmount && maketiles) + + if(A.loc.name == "Space") + return 0 + + if(emagged) + return (istype(A, /turf/simulated/floor)) + + if(!amount) + return 0 + + if(istype(A, /turf/space)) + return 1 + + if(istype(A, /turf/simulated/mineral/floor)) + return 1 + + var/turf/simulated/floor/T = A + return (istype(T) && improvefloors && !T.flooring && (get_turf(T) == loc || prob(40))) /mob/living/bot/floorbot/UnarmedAttack(var/atom/A, var/proximity) if(!..()) return - if(repairing) + if(busy) return if(get_turf(A) != loc) @@ -190,9 +178,9 @@ if(emagged && istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A - repairing = 1 + busy = 1 update_icons() - if(F.is_plating()) + if(F.flooring) visible_message("[src] begins to tear the floor tile from the floor!") if(do_after(src, 50)) F.break_tile_to_plating() @@ -203,15 +191,15 @@ F.ReplaceWithLattice() addTiles(1) target = null - repairing = 0 + busy = 0 update_icons() - else if(istype(A, /turf/space)) + else if(istype(A, /turf/space) || istype(A, /turf/simulated/mineral/floor)) var/building = 2 if(locate(/obj/structure/lattice, A)) building = 1 if(amount < building) return - repairing = 1 + busy = 1 update_icons() visible_message("[src] begins to repair the hole.") if(do_after(src, 50)) @@ -223,12 +211,12 @@ I = PoolOrNew(/obj/item/stack/rods, src) A.attackby(I, src) target = null - repairing = 0 + busy = 0 update_icons() else if(istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A if(!F.flooring && amount) - repairing = 1 + busy = 1 update_icons() visible_message("[src] begins to improve the floor.") if(do_after(src, 50)) @@ -236,12 +224,12 @@ F.set_flooring(get_flooring_data(floor_build_type)) addTiles(-1) target = null - repairing = 0 + busy = 0 update_icons() else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount) var/obj/item/stack/tile/floor/T = A visible_message("[src] begins to collect tiles.") - repairing = 1 + busy = 1 update_icons() if(do_after(src, 20)) if(T) @@ -249,13 +237,13 @@ T.use(eaten) addTiles(eaten) target = null - repairing = 0 + busy = 0 update_icons() else if(istype(A, /obj/item/stack/material) && amount + 4 <= maxAmount) var/obj/item/stack/material/M = A if(M.get_material_name() == DEFAULT_WALL_MATERIAL) visible_message("[src] begins to make tiles.") - repairing = 1 + busy = 1 update_icons() if(do_after(50)) if(M) diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index 2fdabecbbc..e4d39b5afe 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -3,21 +3,16 @@ desc = "A little medical robot. He looks somewhat underwhelmed." icon_state = "medibot0" req_access = list(access_medical) - - var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. botcard_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) + var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. + //AI vars - var/frustration = 0 - var/list/path = list() - var/mob/living/carbon/human/patient = null - var/mob/ignored = list() // Used by emag var/last_newpatient_speak = 0 var/vocal = 1 //Healing vars var/obj/item/weapon/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents. - var/currently_healing = 0 var/injection_amount = 15 //How much reagent do we inject at a time? var/heal_threshold = 10 //Start healing when they have this much damage in a category var/use_beaker = 0 //Use reagents in beaker instead of default treatment agents. @@ -29,49 +24,26 @@ var/treatment_emag = "toxin" var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? -/mob/living/bot/medbot/Life() - ..() +/mob/living/bot/medbot/handleIdle() + if(vocal && prob(1)) + var/message = pick("Radar, put a mask on!", "There's always a catch, and it's the best there is.", "I knew it, I should've been a plastic surgeon.", "What kind of medbay is this? Everyone's dropping like dead flies.", "Delicious!") + say(message) - if(!on) - return +/mob/living/bot/medbot/handleAdjacentTarget() + UnarmedAttack(target) - if(!client) +/mob/living/bot/medbot/lookForTargets() + for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! + if(confirmTarget(H)) + target = H + if(last_newpatient_speak + 300 < world.time) + var/message = pick("Hey, [H.name]! Hold on, I'm coming.", "Wait [H.name]! I want to help!", "[H.name], you appear to be injured!") + say(message) + custom_emote(1, "points at [H.name].") + last_newpatient_speak = world.time + break - if(vocal && prob(1)) - var/message = pick("Radar, put a mask on!", "There's always a catch, and it's the best there is.", "I knew it, I should've been a plastic surgeon.", "What kind of medbay is this? Everyone's dropping like dead flies.", "Delicious!") - say(message) - - if(patient) - if(Adjacent(patient)) - if(!currently_healing) - UnarmedAttack(patient) - else - if(path.len && (get_dist(patient, path[path.len]) > 2)) // We have a path, but it's off - path = list() - if(!path.len && (get_dist(src, patient) > 1)) - spawn(0) - path = AStar(loc, get_turf(patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - path = list() - if(path.len) - step_to(src, path[1]) - path -= path[1] - ++frustration - if(get_dist(src, patient) > 7 || frustration > 8) - patient = null - else - for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! - if(valid_healing_target(H)) - patient = H - frustration = 0 - if(last_newpatient_speak + 300 < world.time) - var/message = pick("Hey, [H.name]! Hold on, I'm coming.", "Wait [H.name]! I want to help!", "[H.name], you appear to be injured!") - say(message) - custom_emote(1, "points at [H.name].") - last_newpatient_speak = world.time - break - -/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H, var/proximity) +/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H) if(!..()) return @@ -81,25 +53,27 @@ if(!istype(H)) return + if(busy) + return + if(H.stat == DEAD) var/death_message = pick("No! NO!", "Live, damnit! LIVE!", "I... I've never lost a patient before. Not today, I mean.") say(death_message) - patient = null + target = null return - var/t = valid_healing_target(H) + var/t = confirmTarget(H) if(!t) var/message = pick("All patched up!", "An apple a day keeps me away.", "Feel better soon!") say(message) - patient = null + target = null return - icon_state = "medibots" visible_message("[src] is trying to inject [H]!") if(declare_treatment) var/area/location = get_area(src) broadcast_medical_hud_message("[src] is treating [H] in [location]", src) - currently_healing = 1 + busy = 1 update_icons() if(do_mob(src, H, 30)) if(t == 1) @@ -107,14 +81,14 @@ else H.reagents.add_reagent(t, injection_amount) visible_message("[src] injects [H] with the syringe!") - currently_healing = 0 + busy = 0 update_icons() /mob/living/bot/medbot/update_icons() overlays.Cut() if(skin) overlays += image('icons/obj/aibots.dmi', "medskin_[skin]") - if(currently_healing) + if(busy) icon_state = "medibots" else icon_state = "medibot[on]" @@ -226,13 +200,13 @@ user << "You short out [src]'s reagent synthesis circuits." visible_message("[src] buzzes oddly!") flick("medibot_spark", src) - patient = null - currently_healing = 0 + target = null + busy = 0 emagged = 1 on = 1 update_icons() . = 1 - ignored |= user + ignore_list |= user /mob/living/bot/medbot/explode() on = 0 @@ -255,15 +229,15 @@ qdel(src) return -/mob/living/bot/medbot/proc/valid_healing_target(var/mob/living/carbon/human/H) +/mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) + if(!..()) + return 0 + if(H.stat == DEAD) // He's dead, Jim - return null + return 0 if(H.suiciding) - return null - - if(H in ignored) - return null + return 0 if(emagged) return treatment_emag diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index a4ede33ab1..c330e0efc0 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -17,23 +17,22 @@ maxHealth = 150 mob_bump_flag = HEAVY + min_target_dist = 0 + max_target_dist = 250 + target_speed = 3 + max_frustration = 5 botcard_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - var/busy = 0 - var/mode = MULE_IDLE var/atom/movable/load + var/paused = 0 var/crates_only = 1 var/auto_return = 1 var/safety = 1 - var/list/path = list() - var/frustration = 0 - var/turf/target var/targetName var/turf/home var/homeName - var/turf/obstacle var/global/amount = 0 @@ -71,19 +70,6 @@ dat += "Power: [on ? "On" : "Off"]
" if(!open) - dat += "Status: " - switch(mode) - if(MULE_IDLE) - dat += "Ready" - if(MULE_MOVING, MULE_UNLOAD, MULE_PATH_DONE) - dat += "Navigating" - if(MULE_UNLOAD) - dat += "Unloading" - if(MULE_LOST) - dat += "Processing commands" - if(MULE_CALC_MIN to MULE_CALC_MAX) - dat += "Calculating navigation path" - dat += "
Current Load: [load ? load.name : "none"]
" if(locked) @@ -177,10 +163,9 @@ /mob/living/bot/mulebot/proc/obeyCommand(var/command) switch(command) if("Home") - mode = MULE_IDLE + resetTarget() target = home targetName = "Home" - mode = MULE_LOST if("SetD") var/new_dest var/list/beaconlist = new() @@ -192,13 +177,13 @@ else alert("No destination beacons available.") if(new_dest) + resetTarget() target = get_turf(beaconlist[new_dest]) targetName = new_dest if("GoTD") - if(mode == MULE_IDLE) - mode = MULE_LOST + paused = 0 if("Stop") - mode = MULE_IDLE + paused = 1 /mob/living/bot/mulebot/emag_act(var/remaining_charges, var/user) locked = !locked @@ -211,89 +196,49 @@ if(open) icon_state = "mulebot-hatch" return - if(mode == MULE_MOVING || mode == MULE_UNLOAD) + if(target_path.len && !paused) icon_state = "mulebot1" return icon_state = "mulebot0" -/mob/living/bot/mulebot/Life() - ..() - - if(busy) - return - +/mob/living/bot/mulebot/handleRegular() if(!safety && prob(1)) flick("mulebot-emagged", src) + update_icons() - switch(mode) - if(MULE_IDLE) // Idle - return - if(MULE_MOVING) // Moving to target - if(!target) // Return home - if(auto_return && home) - target = home - targetName = "Home" - mode = MULE_LOST - else - mode = MULE_IDLE - update_icons() - return - if(loc == target) // Unload or stop - custom_emote(2, "makes a chiming sound.") - playsound(loc, 'sound/machines/chime.ogg', 50, 0) - mode = MULE_UNLOAD - update_icons() - return - if(path.len) // Move - makeStep() - sleep(10) - if(path.len) - makeStep() - else - mode = MULE_LOST +/mob/living/bot/mulebot/handleFrustrated() + custom_emote(2, "makes a sighing buzz.") + playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + ..() - update_icons() - return - if(MULE_UNLOAD) - unload(dir) +/mob/living/bot/mulebot/handleAdjacentTarget() + if(target == src.loc) + custom_emote(2, "makes a chiming sound.") + playsound(loc, 'sound/machines/chime.ogg', 50, 0) + UnarmedAttack(target) + resetTarget() + if(auto_return && home && (loc != home)) + target = home + targetName = "Home" - if(auto_return && home && (loc != home)) - target = home - targetName = "Home" - mode = MULE_LOST - else - mode = MULE_IDLE - update_icons() - return - if(MULE_LOST) // Lost my way - if(target) - spawn(0) - calc_path(obstacle) - mode = MULE_CALC_MIN - else - mode = MULE_IDLE - update_icons() - return - if(MULE_CALC_MIN to MULE_CALC_MAX) // Calcing path - if(path.len) - mode = MULE_PATH_DONE - update_icons() - else - ++mode - return - if(MULE_PATH_DONE) // Done with path - obstacle = null - if(path.len) - frustration = 0 - mode = MULE_MOVING - else - if(home) - target = home - targetName = "Home" - mode = MULE_LOST - else - mode = MULE_IDLE - update_icons() +/mob/living/bot/mulebot/confirmTarget() + return 1 + +/mob/living/bot/mulebot/calcTargetPath() + ..() + if(!target_path.len && target != home) // I presume that target is not null + resetTarget() + target = home + targetName = "Home" + +/mob/living/bot/mulebot/stepToTarget() + if(paused) + return + ..() + +/mob/living/bot/mulebot/UnarmedAttack(var/turf/T) + if(T == src.loc) + unload(dir) /mob/living/bot/mulebot/Bump(var/mob/living/M) if(!safety && istype(M)) @@ -302,28 +247,6 @@ M.Weaken(5) ..() -/mob/living/bot/mulebot/proc/makeStep() - var/turf/next = path[1] - if(next == loc) - path -= next - return - - var/moved = step_towards(src, next) - if(moved) - frustration = 0 - path -= next - else if(frustration < 6) - if(frustration == 3) - custom_emote(2, "makes an annoyed buzzing sound") - playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) - ++frustration - else - custom_emote(2, "makes a sighing buzz.") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - obstacle = next - - mode = MULE_LOST - /mob/living/bot/mulebot/proc/runOver(var/mob/living/carbon/human/H) if(istype(H)) // No safety checks - WILL run over lying humans. Stop ERPing in the maint! visible_message("[src] drives over [H]!") @@ -362,11 +285,6 @@ new /obj/effect/decal/cleanable/blood/oil(Tsec) ..() -/mob/living/bot/mulebot/proc/calc_path(var/turf/avoid = null) - path = AStar(loc, target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, id = botcard, exclude = avoid) - if(!path) - path = list() - /mob/living/bot/mulebot/proc/load(var/atom/movable/C) if(busy || load || get_dist(C, src) > 1 || !isturf(C.loc)) return @@ -384,10 +302,6 @@ if(istype(crate)) crate.close() - //I'm sure someone will come along and ask why this is here... well people were dragging screen items onto the mule, and that was not cool. - //So this is a simple fix that only allows a selection of item types to be considered. Further narrowing-down is below. - //if(!istype(C,/obj/item) && !istype(C,/obj/machinery) && !istype(C,/obj/structure) && !ismob(C)) - // return busy = 1 C.loc = loc @@ -428,11 +342,3 @@ AM.layer = initial(AM.layer) AM.pixel_y = initial(AM.pixel_y) busy = 0 - -#undef MULE_IDLE -#undef MULE_MOVING -#undef MULE_UNLOAD -#undef MULE_LOST -#undef MULE_CALC_MIN -#undef MULE_CALC_MAX -#undef MULE_PATH_DONE diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 6b58028576..ea80efca7e 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -6,8 +6,8 @@ health = 50 req_one_access = list(access_security, access_forensics_lockers) botcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) - - var/mob/target + patrol_speed = 2 + target_speed = 3 var/idcheck = 0 // If true, arrests for having weapons without authorization. var/check_records = 0 // If true, arrests people without a record. @@ -16,30 +16,9 @@ var/declare_arrests = 0 // If true, announces arrests over sechuds. var/auto_patrol = 0 // If true, patrols on its own - var/mode = 0 -#define SECBOT_IDLE 0 // idle -#define SECBOT_HUNT 1 // found target, hunting -#define SECBOT_ARREST 2 // arresting target -#define SECBOT_START_PATROL 3 // start patrol -#define SECBOT_WAIT_PATROL 4 // waiting for signals -#define SECBOT_PATROL 5 // patrolling -#define SECBOT_SUMMON 6 // summoned by PDA - var/is_attacking = 0 var/is_ranged = 0 var/awaiting_surrender = 0 - var/obj/secbot_listener/listener = null - var/beacon_freq = 1445 // Navigation beacon frequency - var/control_freq = BOT_FREQ // Bot control frequency - var/list/path = list() - var/frustration = 0 - var/turf/patrol_target = null // This is where we are headed - var/closest_dist // Used to find the closest beakon - var/destination = "__nearest__" // This is the current beacon's ID - var/next_destination = "__nearest__" // This is the next beacon's ID - var/nearest_beacon // Tag of the beakon that we assume to be the closest one - - var/bot_version = 1.3 var/list/threat_found_sounds = new('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg') var/list/preparing_arrest_sounds = new('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg') @@ -48,24 +27,8 @@ desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." auto_patrol = 1 -/mob/living/bot/secbot/New() - ..() - listener = new /obj/secbot_listener(src) - listener.secbot = src - - spawn(5) // Since beepsky is made on the start... this delay is necessary - if(radio_controller) - radio_controller.add_object(listener, control_freq, filter = RADIO_SECBOT) - radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) - -/mob/living/bot/secbot/turn_off() - ..() - target = null - frustration = 0 - mode = SECBOT_IDLE - /mob/living/bot/secbot/update_icons() - if(on && is_attacking) + if(on && busy) icon_state = "secbot-c" else icon_state = "secbot[on]" @@ -78,7 +41,7 @@ /mob/living/bot/secbot/attack_hand(var/mob/user) user.set_machine(src) var/dat - dat += "Automatic Security Unit v[bot_version]

" + dat += "Automatic Security Unit

" dat += "Status: [on ? "On" : "Off"]
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" dat += "Maintenance panel is [open ? "opened" : "closed"]" @@ -89,7 +52,7 @@ dat += "Operating Mode: [arrest_type ? "Detain" : "Arrest"]
" dat += "Report Arrests: [declare_arrests ? "Yes" : "No"]
" dat += "Auto Patrol: [auto_patrol ? "On" : "Off"]" - user << browse("Securitron v[bot_version] controls[dat]", "window=autosec") + user << browse("Securitron controls[dat]", "window=autosec") onclose(user, "autosec") return @@ -118,7 +81,6 @@ arrest_type = !arrest_type if("patrol") auto_patrol = !auto_patrol - mode = SECBOT_IDLE if("declarearrests") declare_arrests = !declare_arrests attack_hand(usr) @@ -129,127 +91,47 @@ if(health < curhealth) target = user awaiting_surrender = 5 - mode = SECBOT_HUNT -/mob/living/bot/secbot/Life() +/mob/living/bot/secbot/startPatrol() + if(!locked) // Stop running away when we set you up + return ..() - if(!on) - return - if(client) - return - if(!target) - scan_view() +/mob/living/bot/secbot/confirmTarget(var/atom/A) + if(!..()) + return 0 - if(!locked && (mode == SECBOT_START_PATROL || mode == SECBOT_PATROL)) // Stop running away when we set you up - mode = SECBOT_IDLE + return (check_threat(A) > 3) - switch(mode) - if(SECBOT_IDLE) - if(auto_patrol && locked) - mode = SECBOT_START_PATROL +/mob/living/bot/secbot/lookForTargets() + for(var/mob/living/M in view(src)) + if(M.stat == DEAD) + continue + if(confirmTarget(M)) + var/threat = check_threat(M) + target = M + awaiting_surrender = -1 + say("Level [threat] infraction alert!") + custom_emote(1, "points at [M.name]!") return - if(SECBOT_HUNT) // Target is in the view or has been recently - chase it - if(frustration > 7) - target = null - frustration = 0 - awaiting_surrender = 0 - mode = SECBOT_IDLE - return - if(target) - var/threat = check_threat(target) - if(threat < 4) // Re-evaluate in case they dropped the weapon or something - target = null - frustration = 0 - awaiting_surrender = 0 - mode = SECBOT_IDLE - return - if(!(target in view(7, src))) - ++frustration - if(Adjacent(target)) - mode = SECBOT_ARREST - return - else - if(is_ranged) - RangedAttack(target) - else - step_towards(src, target) // Melee bots chase a bit faster - spawn(8) - if(!Adjacent(target)) - step_towards(src, target) - spawn(16) - if(!Adjacent(target)) - step_towards(src, target) +/mob/living/bot/secbot/calcTargetPath() + ..() + if(awaiting_surrender != -1) + awaiting_surrender = 5 // This implies that a) we have already approached the target and b) it has moved after the warning - if(SECBOT_ARREST) // Target is next to us - attack it - if(!target) - mode = SECBOT_IDLE - if(!Adjacent(target)) - awaiting_surrender = 5 // I'm done playing nice - mode = SECBOT_HUNT - return - var/threat = check_threat(target) - if(threat < 4) - target = null - awaiting_surrender = 0 - frustration = 0 - mode = SECBOT_IDLE - return - if(awaiting_surrender < 5 && ishuman(target) && !target.lying) - if(awaiting_surrender == 0) - say("Down on the floor, [target]! You have five seconds to comply.") - ++awaiting_surrender - else - UnarmedAttack(target) - if(ishuman(target) && declare_arrests) - var/area/location = get_area(src) - broadcast_security_hud_message("[src] is [arrest_type ? "detaining" : "arresting"] a level [check_threat(target)] suspect [target] in [location].", src) - return - - if(SECBOT_START_PATROL) - if(path.len && patrol_target) - mode = SECBOT_PATROL - return - else if(patrol_target) - spawn(0) - calc_path() - if(!path.len) - patrol_target = null - mode = SECBOT_IDLE - else - mode = SECBOT_PATROL - if(!patrol_target) - if(next_destination) - find_next_target() - else - find_patrol_target() - say("Engaging patrol mode.") - mode = SECBOT_WAIT_PATROL - return - - if(SECBOT_WAIT_PATROL) - if(patrol_target) - mode = SECBOT_START_PATROL - else - ++frustration - if(frustration > 120) - frustration = 0 - mode = SECBOT_IDLE - - if(SECBOT_PATROL) - patrol_step() - spawn(10) - patrol_step() - return - - if(SECBOT_SUMMON) - patrol_step() - spawn(8) - patrol_step() - spawn(16) - patrol_step() - return +/mob/living/bot/secbot/handleAdjacentTarget() + if(awaiting_surrender < 5 && ishuman(target) && !target:lying) + if(awaiting_surrender == -1) + say("Down on the floor, [target]! You have five seconds to comply.") + ++awaiting_surrender + else + UnarmedAttack(target) + if(ishuman(target) && declare_arrests) + var/area/location = get_area(src) + broadcast_security_hud_message("[src] is [arrest_type ? "detaining" : "arresting"] a level [check_threat(target)] suspect [target] in [location].", src) + + // say("Engaging patrol mode.") /mob/living/bot/secbot/UnarmedAttack(var/mob/M, var/proximity) if(!..()) @@ -271,31 +153,33 @@ C.stun_effect_act(0, 60, null) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) do_attack_animation(C) - is_attacking = 1 + busy = 1 update_icons() spawn(2) - is_attacking = 0 + busy = 0 update_icons() visible_message("[C] was prodded by [src] with a stun baton!") else playsound(loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) visible_message("[src] is trying to put handcuffs on [C]!") + busy = 1 if(do_mob(src, C, 60)) if(!C.handcuffed) C.handcuffed = new /obj/item/weapon/handcuffs(C) C.update_inv_handcuffed() if(preparing_arrest_sounds.len) playsound(loc, pick(preparing_arrest_sounds), 50, 0) + busy = 0 else if(istype(M, /mob/living/simple_animal)) var/mob/living/simple_animal/S = M S.AdjustStunned(10) S.adjustBruteLoss(15) do_attack_animation(M) playsound(loc, "swing_hit", 50, 1, -1) - is_attacking = 1 + busy = 1 update_icons() spawn(2) - is_attacking = 0 + busy = 0 update_icons() visible_message("[M] was beaten by [src] with a stun baton!") @@ -319,30 +203,8 @@ new /obj/effect/decal/cleanable/blood/oil(Tsec) qdel(src) -/mob/living/bot/secbot/proc/scan_view() - for(var/mob/living/M in view(7, src)) - if(M.invisibility >= INVISIBILITY_LEVEL_ONE) - continue - if(M.stat) - continue - - var/threat = check_threat(M) - - if(threat >= 4) - target = M - say("Level [threat] infraction alert!") - custom_emote(1, "points at [M.name]!") - mode = SECBOT_HUNT - break - return - -/mob/living/bot/secbot/proc/calc_path(var/turf/avoid = null) - path = AStar(loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid) - if(!path) - path = list() - /mob/living/bot/secbot/proc/check_threat(var/mob/living/M) - if(!M || !istype(M) || M.stat || src == M) + if(!M || !istype(M) || M.stat == DEAD || src == M) return 0 if(emagged) @@ -350,131 +212,6 @@ return M.assess_perp(access_scanner, 0, idcheck, check_records, check_arrest) -/mob/living/bot/secbot/proc/patrol_step() - if(loc == patrol_target) - patrol_target = null - path = list() - mode = SECBOT_IDLE - return - - if(path.len && patrol_target) - var/turf/next = path[1] - if(loc == next) - path -= next - return - var/moved = step_towards(src, next) - if(moved) - path -= next - frustration = 0 - else - ++frustration - if(frustration > 5) // Make a new path - mode = SECBOT_START_PATROL - return - else - mode = SECBOT_START_PATROL - -/mob/living/bot/secbot/proc/find_patrol_target() - send_status() - nearest_beacon = null - next_destination = "__nearest__" - listener.post_signal(beacon_freq, "findbeacon", "patrol") - -/mob/living/bot/secbot/proc/find_next_target() - send_status() - nearest_beacon = null - listener.post_signal(beacon_freq, "findbeacon", "patrol") - -/mob/living/bot/secbot/proc/send_status() - var/list/kv = list( - "type" = "secbot", - "name" = name, - "loca" = get_area(loc), - "mode" = mode - ) - listener.post_signal_multiple(control_freq, kv) - -/obj/secbot_listener - var/mob/living/bot/secbot/secbot = null - -/obj/secbot_listener/proc/post_signal(var/freq, var/key, var/value) // send a radio signal with a single data key/value pair - post_signal_multiple(freq, list("[key]" = value)) - -/obj/secbot_listener/proc/post_signal_multiple(var/freq, var/list/keyval) // send a radio signal with multiple data key/values - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) - if(!frequency) - return - - var/datum/signal/signal = new() - signal.source = secbot - signal.transmission_method = 1 - signal.data = keyval.Copy() - - if(signal.data["findbeacon"]) - frequency.post_signal(secbot, signal, filter = RADIO_NAVBEACONS) - else if(signal.data["type"] == "secbot") - frequency.post_signal(secbot, signal, filter = RADIO_SECBOT) - else - frequency.post_signal(secbot, signal) - -/obj/secbot_listener/receive_signal(datum/signal/signal) - if(!secbot || !secbot.on) - return - - var/recv = signal.data["command"] - if(recv == "bot_status") - secbot.send_status() - return - - if(signal.data["active"] == secbot) - switch(recv) - if("stop") - secbot.mode = SECBOT_IDLE - secbot.auto_patrol = 0 - return - - if("go") - secbot.mode = SECBOT_IDLE - secbot.auto_patrol = 1 - return - - if("summon") - secbot.patrol_target = signal.data["target"] - secbot.next_destination = secbot.destination - secbot.destination = null - //secbot.awaiting_beacon = 0 - secbot.mode = SECBOT_SUMMON - secbot.calc_path() - secbot.say("Responding.") - return - - recv = signal.data["beacon"] - var/valid = signal.data["patrol"] - if(!recv || !valid) - return - - if(recv == secbot.next_destination) // This beacon is our target - secbot.destination = secbot.next_destination - secbot.patrol_target = signal.source.loc - secbot.next_destination = signal.data["next_patrol"] - else if(secbot.next_destination == "__nearest__") - var/dist = get_dist(secbot, signal.source.loc) - if(dist <= 1) - return - - if(secbot.nearest_beacon) - if(dist < secbot.closest_dist) - secbot.nearest_beacon = recv - secbot.patrol_target = secbot.nearest_beacon - secbot.next_destination = signal.data["next_patrol"] - secbot.closest_dist = dist - return - else - secbot.nearest_beacon = recv - secbot.patrol_target = secbot.nearest_beacon - secbot.next_destination = signal.data["next_patrol"] - secbot.closest_dist = dist - //Secbot Construction /obj/item/clothing/head/helmet/attackby(var/obj/item/device/assembly/signaler/S, mob/user as mob) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 9a7cbbe06a..77fe986857 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -22,8 +22,15 @@ var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80 if (hungry >= 70) tally += hungry/50 - if(wear_suit) - tally += wear_suit.slowdown + // Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately. + // Includes slots which can provide armor, the back slot, and suit storage. + for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) ) + tally += I.slowdown + + // Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable. + // This is done seperately to disallow negative numbers. + for(var/obj/item/I in list(r_hand, l_hand) ) + tally += max(I.slowdown, 0) if(istype(buckled, /obj/structure/bed/chair/wheelchair)) for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM)) diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index 07248927bd..8b6f722718 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -1,4 +1,3 @@ - /mob/living/carbon/process_resist() //drop && roll @@ -17,9 +16,12 @@ "You extinguish yourself." ) ExtinguishMob() - return + return TRUE - else if(handcuffed) + if(..()) + return TRUE + + if(handcuffed) spawn() escape_handcuffs() else if(legcuffed) spawn() escape_legcuffs() @@ -57,8 +59,8 @@ "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" ) - if(do_after(src, breakouttime)) - if(!handcuffed) + if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if(!handcuffed || buckled) return visible_message( "\The [src] manages to remove \the [handcuffed]!", @@ -91,7 +93,7 @@ "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" ) - if(do_after(src, breakouttime)) + if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) if(!legcuffed || buckled) return visible_message( @@ -113,7 +115,7 @@ "You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)" ) - if(do_after(src, 50)) + if(do_after(src, 5 SECONDS, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) if(!handcuffed || buckled) return @@ -134,7 +136,7 @@ src << "You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)" visible_message("[src] is trying to break the legcuffs!") - if(do_after(src, 50)) + if(do_after(src, 5 SECONDS, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) if(!legcuffed || buckled) return @@ -166,7 +168,7 @@ "You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" ) - if(do_after(usr, 1200)) + if(do_after(usr, 2 MINUTES, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) if(!buckled) return visible_message("[usr] manages to unbuckle themself!", diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm index 1cd446eaec..c1aa244d55 100644 --- a/code/modules/mob/living/inventory.dm +++ b/code/modules/mob/living/inventory.dm @@ -10,13 +10,13 @@ // Try put it in their backpack if(istype(src.back,/obj/item/weapon/storage)) var/obj/item/weapon/storage/backpack = src.back - if(backpack.contents.len < backpack.storage_slots) + if(backpack.can_be_inserted(newitem, 1)) newitem.forceMove(src.back) return 1 // Try to place it in any item that can store stuff, on the mob. for(var/obj/item/weapon/storage/S in src.contents) - if (S.contents.len < S.storage_slots) + if (S.can_be_inserted(newitem, 1)) newitem.forceMove(S) return 1 return 0 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 70a3f4c3a2..f3e1173d53 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -510,52 +510,38 @@ default behaviour is: if ((get_dist(src, pulling) > 1 || diag)) if (isliving(pulling)) var/mob/living/M = pulling - var/ok = 1 - if (locate(/obj/item/weapon/grab, M.grabbed_by)) - if (prob(75)) - var/obj/item/weapon/grab/G = pick(M.grabbed_by) - if (istype(G, /obj/item/weapon/grab)) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1) - //G = null - qdel(G) - else - ok = 0 - if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) - ok = 0 - if (ok) - var/atom/movable/t = M.pulling - M.stop_pulling() + var/atom/movable/t = M.pulling + M.stop_pulling() - if(!istype(M.loc, /turf/space)) - var/area/A = get_area(M) - if(A.has_gravity) - //this is the gay blood on floor shit -- Added back -- Skie - if (M.lying && (prob(M.getBruteLoss() / 6))) + if(!istype(M.loc, /turf/space)) + var/area/A = get_area(M) + if(A.has_gravity) + //this is the gay blood on floor shit -- Added back -- Skie + if (M.lying && (prob(M.getBruteLoss() / 6))) + var/turf/location = M.loc + if (istype(location, /turf/simulated)) + location.add_blood(M) + //pull damage with injured people + if(prob(25)) + M.adjustBruteLoss(1) + visible_message("\The [M]'s [M.isSynthetic() ? "state worsens": "wounds open more"] from being dragged!") + if(M.pull_damage()) + if(prob(25)) + M.adjustBruteLoss(2) + visible_message("\The [M]'s [M.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!") var/turf/location = M.loc if (istype(location, /turf/simulated)) location.add_blood(M) - //pull damage with injured people - if(prob(25)) - M.adjustBruteLoss(1) - visible_message("\The [M]'s [M.isSynthetic() ? "state worsens": "wounds open more"] from being dragged!") - if(M.pull_damage()) - if(prob(25)) - M.adjustBruteLoss(2) - visible_message("\The [M]'s [M.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!") - var/turf/location = M.loc - if (istype(location, /turf/simulated)) - location.add_blood(M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/blood_volume = round(H.vessel.get_reagent_amount("blood")) - if(blood_volume > 0) - H.vessel.remove_reagent("blood", 1) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/blood_volume = round(H.vessel.get_reagent_amount("blood")) + if(blood_volume > 0) + H.vessel.remove_reagent("blood", 1) - step(pulling, get_dir(pulling.loc, T)) - if(t) - M.start_pulling(t) + step(pulling, get_dir(pulling.loc, T)) + if(t) + M.start_pulling(t) else if (pulling) if (istype(pulling, /obj/structure/window)) @@ -595,11 +581,13 @@ default behaviour is: //unbuckling yourself if(buckled) spawn() escape_buckle() + return TRUE //Breaking out of a locker? if( src.loc && (istype(src.loc, /obj/structure/closet)) ) var/obj/structure/closet/C = loc spawn() C.mob_breakout(src) + return TRUE /mob/living/proc/escape_inventory(obj/item/weapon/holder/H) if(H != src.loc) return @@ -662,7 +650,7 @@ default behaviour is: src << "You are now [resting ? "resting" : "getting up"]" /mob/living/proc/is_allowed_vent_crawl_item(var/obj/item/carried_item) - return isnull(get_inventory_slot(carried_item)) + return (get_inventory_slot(carried_item) == 0) /mob/living/simple_animal/spiderbot/is_allowed_vent_crawl_item(var/obj/item/carried_item) if(carried_item == held_item) @@ -730,10 +718,12 @@ default behaviour is: return if(!ignore_items) + var/list/badItems = list() for(var/obj/item/carried_item in contents)//If the monkey got on objects. - if(is_allowed_vent_crawl_item(carried_item)) - continue - src << "You can't be carrying items or have items equipped when vent crawling!" + if(!is_allowed_vent_crawl_item(carried_item)) + badItems += carried_item.name + if(badItems.len) + src << "Your [english_list(badItems)] prevent[badItems.len == 1 ? "s" : ""] you from ventcrawling." return if(isslime(src)) diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 2d591f4c36..ee25aebe24 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -28,10 +28,9 @@ user << "You activate the analyzer's microlaser, analyzing \the [loaded_item] and breaking it down." flick("portable_analyzer_scan", src) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - var/list/temp_tech = ConvertReqString2List(loaded_item.origin_tech) - for(var/T in temp_tech) - files.UpdateTech(T, temp_tech[T]) - user << "\The [loaded_item] had level [temp_tech[T]] in [T]." + for(var/T in loaded_item.origin_tech) + files.UpdateTech(T, loaded_item.origin_tech[T]) + user << "\The [loaded_item] had level [loaded_item.origin_tech[T]] in [CallTechName(T)]." loaded_item = null for(var/obj/I in contents) for(var/mob/M in I.contents) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ed8ce8f9d8..69371109ec 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -20,6 +20,7 @@ var/global/list/robot_modules = list( w_class = 100.0 item_state = "electronic" flags = CONDUCT + var/hide_on_manifest = 0 var/channels = list() var/networks = list() var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK_TAJR = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0) @@ -617,6 +618,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/syndicate name = "illegal robot module" + hide_on_manifest = 1 languages = list( LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, @@ -651,6 +653,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/security/combat name = "combat robot module" + hide_on_manifest = 1 sprites = list("Combat Android" = "droid-combat") /obj/item/weapon/robot_module/combat/New() @@ -665,6 +668,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/drone name = "drone module" + hide_on_manifest = 1 no_slip = 1 networks = list(NETWORK_ENGINEERING) @@ -747,6 +751,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/drone/construction name = "construction drone module" + hide_on_manifest = 1 channels = list("Engineering" = 1) languages = list() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 2de63692a9..2fbad9deee 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -72,7 +72,8 @@ /mob/living/simple_animal/Login() if(src && src.client) - src.client.screen = null + src.client.screen = list() + src.client.screen += src.client.void ..() /mob/living/simple_animal/updatehealth() diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 7658f28ce1..7f6fdd8aab 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -30,7 +30,7 @@ world.update_status() client.images = null //remove the images such as AIs being unable to see runes - client.screen = null //remove hud items just in case + client.screen = list() //remove hud items just in case if(hud_used) qdel(hud_used) //remove the hud objects hud_used = new /datum/hud(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ebb7f19ef4..4503ae144b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -362,6 +362,7 @@ log_game("[usr.key] AM failed due to disconnect.") return client.screen.Cut() + client.screen += client.void if(!client) log_game("[usr.key] AM failed due to disconnect.") return @@ -546,21 +547,33 @@ if(ismob(AM)) if(!can_pull_mobs || !can_pull_size) - src << "It won't budge!" + src << "They won't budge!" return if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) - src << "It won't budge!" + src << "[M] is too large for you to move!" return if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) - src << "It won't budge!" + src << "[M] is too heavy for you to move!" return // If your size is larger than theirs and you have some // kind of mob pull value AT ALL, you will be able to pull // them, so don't bother checking that explicitly. + if(M.grabbed_by.len) + // Only start pulling when nobody else has a grab on them + . = 1 + for(var/obj/item/weapon/grab/G in M.grabbed_by) + if(G.assailant != usr) + . = 0 + else + qdel(G) + if(!.) + src << "Somebody has a grip on them!" + return + if(!iscarbon(src)) M.LAssailant = null else diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index ec83ced425..47e0584740 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -57,8 +57,14 @@ G.dancing = 1 G.adjust_position() dancing = 1 + + //stop pulling the affected + if(assailant.pulling == affecting) + assailant.stop_pulling() + adjust_position() + //Used by throw code to hand over the mob, instead of throwing the grab. The grab is then deleted by the throw code. /obj/item/weapon/grab/proc/throw_held() if(affecting) @@ -91,9 +97,6 @@ assailant.client.screen -= hud assailant.client.screen += hud - if(assailant.pulling == affecting) - assailant.stop_pulling() - if(state <= GRAB_AGGRESSIVE) allow_upgrade = 1 //disallow upgrading if we're grabbing more than one person diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index b1eebda6a9..3f8d01d3c0 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -66,11 +66,26 @@ icon_state = "seromi_default" species_allowed = list("Teshari") + teshari_altdefault + name = "Teshari Alt. Default" + icon_state = "seromi_ears" + species_allowed = list("Teshari") + + teshari_tight + name = "Teshari Tight" + icon_state = "seromi_tight" + species_allowed = list("Teshari") + teshari_excited name = "Teshari Spiky" icon_state = "seromi_spiky" species_allowed = list("Teshari") + teshari_spike + name = "Teshari Spike" + icon_state = "seromi_spike" + species_allowed = list("Teshari") + teshari_long name = "Teshari Overgrown" icon_state = "seromi_long" @@ -81,7 +96,7 @@ icon_state = "seromi_burst" species_allowed = list("Teshari") - teshari_burst + teshari_shortburst name = "Teshari Short Starburst" icon_state = "seromi_burst_short" species_allowed = list("Teshari") diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 7a954a4b31..ec47effaba 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -54,7 +54,7 @@ src << "Deadchat is globally muted." return - if(is_preference_enabled(/datum/client_preference/show_dsay)) + if(!is_preference_enabled(/datum/client_preference/show_dsay)) usr << "You have deadchat muted." return diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm index dd65b7bbd0..3b2b4158e8 100644 --- a/code/modules/nano/nanomapgen.dm +++ b/code/modules/nano/nanomapgen.dm @@ -1,7 +1,7 @@ // This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm #define NANOMAP_ICON_SIZE 4 -#define NANOMAP_MAX_ICON_DIMENSION 1024 +#define NANOMAP_MAX_ICON_DIMENSION 1200 #define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE) @@ -19,42 +19,42 @@ /client/proc/nanomapgen_DumpImage() set name = "Generate NanoUI Map" set category = "Server" - + if(holder) - nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) + nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) /client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) if (endX < 0 || endX > world.maxx) endX = world.maxx - + if (endY < 0 || endY > world.maxy) endY = world.maxy - + if (currentZ < 0 || currentZ > world.maxz) usr << "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]" - + sleep(3) return NANOMAP_TERMINALERR - + if (startX > endX) usr << "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])" - + sleep(3) return NANOMAP_TERMINALERR - + if (startY > endX) usr << "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])" sleep(3) return NANOMAP_TERMINALERR - - var/icon/Tile = icon(file("nano/mapbase1024.png")) + + var/icon/Tile = icon(file("nano/mapbase1200.png")) if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) world.log << "NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]" sleep(3) return NANOMAP_TERMINALERR - - world.log << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" + + world.log << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" usr << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" var/count = 0; @@ -62,26 +62,26 @@ for(var/WorldY = startY, WorldY <= endY, WorldY++) var/atom/Turf = locate(WorldX, WorldY, currentZ) - + var/icon/TurfIcon = new(Turf.icon, Turf.icon_state) TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) - + Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) - + count++ - + if (count % 8000 == 0) world.log << "NanoMapGen: [count] tiles done" sleep(1) - + var/mapFilename = "nanomap_z[currentZ]-new.png" - + world.log << "NanoMapGen: sending [mapFilename] to client" usr << browse(Tile, "window=picture;file=[mapFilename];display=0") - + world.log << "NanoMapGen: Done." - + usr << "NanoMapGen: Done. File [mapFilename] uploaded to your cache." if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index ac27e85841..cebd834a24 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -56,6 +56,7 @@ var/disfigured = 0 // Scarred/burned beyond recognition. var/cannot_amputate // Impossible to amputate. var/cannot_break // Impossible to fracture. + var/cannot_gib // Impossible to gib, distinct from amputation. var/joint = "joint" // Descriptive string used in dislocation. var/amputation_point // Descriptive string used in amputation. var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ. @@ -727,12 +728,16 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [src.name] goes flying off!",\ "You hear a terrible sound of [gore_sound].") if(DROPLIMB_BURN) + if(cannot_gib) + return var/gore = "[(status & ORGAN_ROBOT) ? "": " of burning flesh"]" owner.visible_message( "\The [owner]'s [src.name] flashes away into ashes!",\ "Your [src.name] flashes away into ashes!",\ "You hear a crackling sound[gore].") if(DROPLIMB_BLUNT) + if(cannot_gib) + return var/gore = "[(status & ORGAN_ROBOT) ? "": " in shower of gore"]" var/gore_sound = "[(status & ORGAN_ROBOT) ? "rending sound of tortured metal" : "sickening splatter of gore"]" owner.visible_message( diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index e4edadfe14..6975e747d0 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -104,6 +104,7 @@ icon = 'icons/obj/robot_component.dmi' icon_state = "camera" dead_icon = "camera_broken" + verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color /obj/item/organ/internal/eyes/robot name = "optical sensor" @@ -112,6 +113,26 @@ ..() robotize() +/obj/item/organ/internal/eyes/proc/change_eye_color() + set name = "Change Eye Color" + set desc = "Changes your robotic eye color instantly." + set category = "IC" + set src in usr + + var/current_color = rgb(eye_colour[1],eye_colour[2],eye_colour[3]) + var/new_color = input("Pick a new color for your eyes.","Eye Color", current_color) as null|color + if(new_color && owner) + // input() supplies us with a hex color, which we can't use, so we convert it to rbg values. + var/list/new_color_rgb_list = hex2rgb(new_color) + // First, update mob vars. + owner.r_eyes = new_color_rgb_list[1] + owner.g_eyes = new_color_rgb_list[2] + owner.b_eyes = new_color_rgb_list[3] + // Now sync the organ's eye_colour list. + update_colour() + // Finally, update the eye icon on the mob. + owner.update_eyes() + /obj/item/organ/internal/eyes/replaced(var/mob/living/carbon/human/target) // Apply our eye colour to the target. diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 5d195f3b0c..ffc337824d 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -145,6 +145,7 @@ joint = "jaw" amputation_point = "neck" gendered_icon = 1 + cannot_gib = 1 encased = "skull" var/can_intake_reagents = 1 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 4bbce17aa1..f3596a5d9a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -590,7 +590,7 @@ icon = 'icons/obj/lighting.dmi' force = 2 throwforce = 5 - w_class = 2 + w_class = 1 var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4a62b5d073..ab052834ec 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -146,7 +146,7 @@ PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at. return - if(user && user.a_intent == I_HELP) //regardless of what happens, refuse to shoot if help intent is on + if(user && user.a_intent == I_HELP && user.is_preference_enabled(/datum/client_preference/safefiring)) //regardless of what happens, refuse to shoot if help intent is on user << "You refrain from firing your [src] as your intent is set to help." else Fire(A,user,params) //Otherwise, fire normally. @@ -164,6 +164,8 @@ add_fingerprint(user) + user.break_cloak() + if(!special_check(user)) return diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 665e9342c1..5889b523e1 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -5,7 +5,7 @@ desc = "A vicious alien projectile weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive." var/last_regen = 0 - var/spike_gen_time = 100 + var/spike_gen_time = 150 var/max_spikes = 3 var/spikes = 3 release_force = 30 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index fd9f620bad..8cd8f72a36 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -110,7 +110,7 @@ obj/item/weapon/gun/energy/retro max_shots = 4 fire_delay = 35 force = 10 - w_class = 4 + w_class = 5 // So it can't fit in a backpack. accuracy = -3 //shooting at the hip scoped_accuracy = 0 // requires_two_hands = 1 diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index e38740e732..e03ff73988 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -3,7 +3,7 @@ desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells." icon_state = "heavysniper" item_state = "l6closednomag" //placeholder - w_class = 4 + w_class = 5 // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 3a3fdc7f23..f564b399ad 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -136,9 +136,6 @@ icon_state = "xray" damage = 50 armor_penetration = 10 - stun = 3 - weaken = 3 - stutter = 3 muzzle_type = /obj/effect/projectile/xray/muzzle tracer_type = /obj/effect/projectile/xray/tracer diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 46b01a9d1b..b0577bdf5f 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -23,6 +23,7 @@ owner = newowner loc = null verbs.Cut() + toggle_permission(TARGET_CAN_RADIO) /obj/aiming_overlay/proc/toggle_permission(var/perm) @@ -202,6 +203,7 @@ obj/aiming_overlay/proc/update_aiming_deferred() else owner << "You will no longer aim rather than fire." owner.client.remove_gun_icons() + owner.gun_setting_icon.icon_state = "gun[active]" /obj/aiming_overlay/proc/cancel_aiming(var/no_message = 0) if(!aiming_with || !aiming_at) diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm index ea18fc3a70..9fd2208a35 100644 --- a/code/modules/projectiles/targeting/targeting_triggers.dm +++ b/code/modules/projectiles/targeting/targeting_triggers.dm @@ -1,4 +1,8 @@ -/mob/living/proc/trigger_aiming(var/trigger_type) +//as core click exists at the mob level +/mob/proc/trigger_aiming(var/trigger_type) + return + +/mob/living/trigger_aiming(var/trigger_type) if(!aimed.len) return for(var/obj/aiming_overlay/AO in aimed) @@ -16,14 +20,10 @@ if(!owner.canClick()) return owner.setClickCooldown(5) // Spam prevention, essentially. - if(owner.a_intent == I_HELP) + if(owner.a_intent == I_HELP && owner.is_preference_enabled(/datum/client_preference/safefiring)) owner << "You refrain from firing \the [aiming_with] as your intent is set to help." return owner.visible_message("\The [owner] pulls the trigger reflexively!") var/obj/item/weapon/gun/G = aiming_with if(istype(G)) G.Fire(aiming_at, owner) - -/mob/living/ClickOn(var/atom/A, var/params) - . = ..() - trigger_aiming(TARGET_CAN_CLICK) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index d176ab205e..d69bd5a13c 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -366,13 +366,13 @@ return if(istype(O,/obj/item/weapon/storage/bag/plants)) + var/obj/item/weapon/storage/bag/plants/bag = O var/failed = 1 for(var/obj/item/G in O.contents) if(!G.reagents || !G.reagents.total_volume) continue failed = 0 - O.contents -= G - G.loc = src + bag.remove_from_storage(G, src) holdingitems += G if(holdingitems && holdingitems.len >= limit) break diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 574e1131aa..e7317b32e8 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -55,7 +55,7 @@ return if(!affects_dead && M.stat == DEAD) return - if(overdose && (dose > overdose) && (location != CHEM_TOUCH)) + if(overdose && (volume > overdose) && (location != CHEM_TOUCH)) overdose(M, alien) var/removed = metabolism if(ingest_met && (location == CHEM_INGEST)) diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm new file mode 100644 index 0000000000..edb4e3b890 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -0,0 +1,115 @@ +var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/snacks/sandwich, + /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice, + /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice, + /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice, + /obj/item/weapon/reagent_containers/food/snacks/margheritaslice, + /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/tastybread, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, + /obj/item/weapon/reagent_containers/food/snacks/tossedsalad) + +var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/muffin, + /obj/item/weapon/reagent_containers/food/snacks/popcorn, + /obj/item/weapon/reagent_containers/food/snacks/sosjerky, + /obj/item/weapon/reagent_containers/food/snacks/no_raisin, + /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie, + /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, + /obj/item/weapon/reagent_containers/food/snacks/carrotfries, + /obj/item/weapon/reagent_containers/food/snacks/candiedapple, + /obj/item/weapon/reagent_containers/food/snacks/applepie, + /obj/item/weapon/reagent_containers/food/snacks/cherrypie, + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, + /obj/item/weapon/reagent_containers/food/snacks/appletart, + /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice, + /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice, + /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/limecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice, + /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice, + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice, + /obj/item/weapon/reagent_containers/food/snacks/applecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice, + /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks) + +var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, + /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, + /obj/item/weapon/reagent_containers/food/drinks/cans/starkist, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_up, + /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, + /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, + /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, + /obj/item/weapon/reagent_containers/food/drinks/cans/tonic, + /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater) + +// This default list is a bit different, it contains items we don't want +var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing, + /datum/reagent/drink/doctor_delight, + /datum/reagent/drink/dry_ramen, + /datum/reagent/drink/hell_ramen, + /datum/reagent/drink/hot_ramen, + /datum/reagent/drink/nuka_cola,) + +// This default list is a bit different, it contains items we don't want +var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, + /datum/reagent/ethanol/atomicbomb, + /datum/reagent/ethanol/beepsky_smash, + /datum/reagent/ethanol/coffee, + /datum/reagent/ethanol/hippies_delight, + /datum/reagent/ethanol/hooch, + /datum/reagent/ethanol/thirteenloko, + /datum/reagent/ethanol/manhattan_proj, + /datum/reagent/ethanol/neurotoxin, + /datum/reagent/ethanol/pwine, + /datum/reagent/ethanol/threemileisland, + /datum/reagent/ethanol/toxins_special) + +/proc/lunchables_lunches() + if(!(lunchables_lunches_[lunchables_lunches_[1]])) + lunchables_lunches_ = init_lunchable_list(lunchables_lunches_) + return lunchables_lunches_ + +/proc/lunchables_snacks() + if(!(lunchables_snacks_[lunchables_snacks_[1]])) + lunchables_snacks_ = init_lunchable_list(lunchables_snacks_) + return lunchables_snacks_ + +/proc/lunchables_drinks() + if(!(lunchables_drinks_[lunchables_drinks_[1]])) + lunchables_drinks_ = init_lunchable_list(lunchables_drinks_) + return lunchables_drinks_ + +/proc/lunchables_drink_reagents() + if(!(lunchables_drink_reagents_[lunchables_drink_reagents_[1]])) + lunchables_drink_reagents_ = init_lunchable_reagent_list(lunchables_drink_reagents_, /datum/reagent/drink) + return lunchables_drink_reagents_ + +/proc/lunchables_ethanol_reagents() + if(!(lunchables_ethanol_reagents_[lunchables_ethanol_reagents_[1]])) + lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /datum/reagent/ethanol) + return lunchables_ethanol_reagents_ + +/proc/init_lunchable_list(var/list/lunches) + . = list() + for(var/lunch in lunches) + var/obj/O = lunch + .[initial(O.name)] = lunch + return sortAssoc(.) + +/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types) + . = list() + for(var/reagent_type in subtypes(reagent_types)) + if(reagent_type in banned_reagents) + continue + var/datum/reagent/reagent = reagent_type + .[initial(reagent.name)] = initial(reagent.id) + return sortAssoc(.) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 5034c8aac0..5bde55f24d 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -2242,6 +2242,12 @@ filling_color = "#FF7575" bitesize = 2 center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread name = "xenomeatbread loaf" @@ -2266,6 +2272,12 @@ filling_color = "#8AFF75" bitesize = 2 center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread name = "Banana-nut bread" @@ -2290,6 +2302,12 @@ filling_color = "#EDE5AD" bitesize = 2 center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("banana", 4) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread name = "Tofubread" @@ -2313,6 +2331,11 @@ filling_color = "#F7FFE0" bitesize = 2 center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 6) /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake @@ -2338,6 +2361,12 @@ filling_color = "#FFD675" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("imidazoline", 2) + reagents.add_reagent("nutriment", 5) /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake name = "Brain Cake" @@ -2363,6 +2392,13 @@ filling_color = "#E6AEDB" bitesize = 2 center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/braincakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 5) + reagents.add_reagent("nutriment", 1) + reagents.add_reagent("alkysine", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake name = "Cheese Cake" @@ -2387,6 +2423,12 @@ filling_color = "#FAF7AF" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake name = "Vanilla Cake" @@ -2409,6 +2451,11 @@ filling_color = "#F7EDD5" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake name = "Orange Cake" @@ -2431,6 +2478,11 @@ filling_color = "#FADA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake name = "Lime Cake" @@ -2453,6 +2505,11 @@ filling_color = "#CBFA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/limecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake name = "Lemon Cake" @@ -2475,6 +2532,11 @@ filling_color = "#FAFA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake name = "Chocolate Cake" @@ -2497,6 +2559,11 @@ filling_color = "#805930" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel name = "Cheese wheel" @@ -2543,6 +2610,12 @@ filling_color = "#FFD6D6" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread name = "Bread" @@ -2566,6 +2639,11 @@ filling_color = "#D27332" bitesize = 2 center_of_mass = list("x"=16, "y"=4) + +/obj/item/weapon/reagent_containers/food/snacks/breadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread @@ -2591,7 +2669,12 @@ filling_color = "#FFF896" bitesize = 2 center_of_mass = list("x"=16, "y"=13) - + +/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 1) /obj/item/weapon/reagent_containers/food/snacks/watermelonslice name = "Watermelon Slice" @@ -2600,7 +2683,11 @@ filling_color = "#FF3867" bitesize = 2 center_of_mass = list("x"=16, "y"=10) - + +/obj/item/weapon/reagent_containers/food/snacks/watermelonslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("watermelonjuice", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake name = "Apple Cake" @@ -2623,6 +2710,11 @@ filling_color = "#EBF5B8" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/applecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 3) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie name = "Pumpkin Pie" @@ -2645,6 +2737,11 @@ filling_color = "#F5B951" bitesize = 2 center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 3) /obj/item/weapon/reagent_containers/food/snacks/cracker name = "Cracker" @@ -2687,6 +2784,13 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/margheritaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("protein", 1) + reagents.add_reagent("tomatojuice", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza name = "Meatpizza" @@ -2709,6 +2813,12 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 7) + reagents.add_reagent("tomatojuice", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza name = "Mushroompizza" @@ -2731,6 +2841,12 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("protein", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza name = "Vegetable pizza" @@ -2755,6 +2871,14 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("protein", 1) + reagents.add_reagent("tomatojuice", 1) + reagents.add_reagent("imidazoline", 2) /obj/item/pizzabox name = "pizza box" diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index f10e3ae472..85ace41452 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -395,7 +395,7 @@ /datum/design/item/mecha/drill name = "Drill" - id = "drill" + id = "mech_drill" build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill /datum/design/item/mecha/extinguisher diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 9f9315eba6..186c869ad3 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -47,19 +47,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, req_access = list(access_research) //Data and setting manipulation requires scientist access. -/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID. - var/datum/tech/check_tech - var/return_name = null - for(var/T in typesof(/datum/tech) - /datum/tech) - check_tech = null - check_tech = new T() - if(check_tech.id == ID) - return_name = check_tech.name - qdel(check_tech) - check_tech = null - break - return return_name - /obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) var/return_name = ID switch(return_name) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 8dc8a12263..fc5ca4bcbf 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -122,6 +122,13 @@ research holder datum. KT.level = max(KT.level + 1, level - 1) return +// A simple helper proc to find the name of a tech with a given ID. +/proc/CallTechName(var/ID) + for(var/T in subtypes(/datum/tech)) + var/datum/tech/check_tech = T + if(initial(check_tech.id) == ID) + return initial(check_tech.name) + /*************************************************************** ** Technology Datums ** ** Includes all the various technoliges and what they make. ** diff --git a/code/modules/research/xenoarchaeology/tools/tools.dm b/code/modules/research/xenoarchaeology/tools/tools.dm index e16db119c5..bc9d0ca21f 100644 --- a/code/modules/research/xenoarchaeology/tools/tools.dm +++ b/code/modules/research/xenoarchaeology/tools/tools.dm @@ -30,7 +30,6 @@ icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET w_class = 3 - storage_slots = 50 - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class + max_storage_space = 100 max_w_class = 3 can_hold = list(/obj/item/weapon/fossil) diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm new file mode 100644 index 0000000000..7ca778655a --- /dev/null +++ b/code/unit_tests/loadout_tests.dm @@ -0,0 +1,23 @@ +/datum/unit_test/loadout_test_shall_have_name_cost_path + name = "LOADOUT: Entries shall have name, cost, and path definitions" + +/datum/unit_test/loadout_test_shall_have_name_cost_path/start_test() + var/failed = 0 + for(var/geartype in typesof(/datum/gear) - /datum/gear) + var/datum/gear/G = geartype + + if(!initial(G.display_name)) + log_unit_test("[G]: Loadout - Missing display name.") + failed = 1 + else if(!initial(G.cost)) + log_unit_test("[G]: Loadout - Missing cost.") + failed = 1 + else if(!initial(G.path)) + log_unit_test("[G]: Loadout - Missing path definition.") + failed = 1 + + if(failed) + fail("One or more /datum/gear definitions had invalid display names, costs, or path definitions") + else + pass("All /datum/gear definitions had correct settings.") + return 1 diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm new file mode 100644 index 0000000000..97d4909833 --- /dev/null +++ b/code/unit_tests/map_tests.dm @@ -0,0 +1,99 @@ +/datum/unit_test/apc_area_test + name = "MAP: Area Test APC / Scrubbers / Vents Z level 1" + +/datum/unit_test/apc_area_test/start_test() + var/list/bad_areas = list() + var/area_test_count = 0 + var/list/exempt_areas = typesof(/area/space, + /area/syndicate_station, + /area/skipjack_station, + /area/solar, + /area/shuttle, + /area/holodeck, + /area/supply/station, + /area/mine, + /area/vacant/vacant_shop + ) + + var/list/exempt_from_atmos = typesof(/area/maintenance, + /area/storage, + /area/engineering/atmos/storage, + /area/rnd/test_area, + /area/construction, + /area/server, + /area/mine, + /area/vacant/vacant_shop, + /area/rnd/research_storage, // This should probably be fixed, + /area/security/riot_control // This should probably be fixed, + ) + + var/list/exempt_from_apc = typesof(/area/construction, + /area/medical/genetics, + /area/mine, + /area/vacant/vacant_shop + ) + + for(var/area/A in world) + if(A.z == 1 && !(A.type in exempt_areas)) + area_test_count++ + var/area_good = 1 + var/bad_msg = "--------------- [A.name]([A.type])" + + + if(isnull(A.apc) && !(A.type in exempt_from_apc)) + log_unit_test("[bad_msg] lacks an APC.") + area_good = 0 + + if(!A.air_scrub_info.len && !(A.type in exempt_from_atmos)) + log_unit_test("[bad_msg] lacks an Air scrubber.") + area_good = 0 + + if(!A.air_vent_info.len && !(A.type in exempt_from_atmos)) + log_unit_test("[bad_msg] lacks an Air vent.") + area_good = 0 + + if(!area_good) + bad_areas.Add(A) + + if(bad_areas.len) + fail("\[[bad_areas.len]/[area_test_count]\]Some areas lacked APCs, Air Scrubbers, or Air vents.") + else + pass("All \[[area_test_count]\] areas contained APCs, Air scrubbers, and Air vents.") + + return 1 + +/datum/unit_test/wire_test + name = "MAP: Cable Test Z level 1" + +/datum/unit_test/wire_test/start_test() + var/wire_test_count = 0 + var/bad_tests = 0 + var/turf/T = null + var/obj/structure/cable/C = null + var/list/cable_turfs = list() + var/list/dirs_checked = list() + + for(C in world) + T = null + + T = get_turf(C) + if(T && T.z == 1) + cable_turfs |= get_turf(C) + + for(T in cable_turfs) + var/bad_msg = "--------------- [T.name] \[[T.x] / [T.y] / [T.z]\]" + dirs_checked.Cut() + for(C in T) + wire_test_count++ + var/combined_dir = "[C.d1]-[C.d2]" + if(combined_dir in dirs_checked) + bad_tests++ + log_unit_test("[bad_msg] Contains multiple wires with same direction on top of each other.") + dirs_checked.Add(combined_dir) + + if(bad_tests) + fail("\[[bad_tests] / [wire_test_count]\] Some turfs had overlapping wires going the same direction.") + else + pass("All \[[wire_test_count]\] wires had no overlapping cables going the same direction.") + + return 1 diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm new file mode 100644 index 0000000000..c6b21e5d36 --- /dev/null +++ b/code/unit_tests/mob_tests.dm @@ -0,0 +1,29 @@ +/datum/unit_test/space_suffocation + name = "MOB: human mob suffocates in space" + + var/startOxyloss + var/endOxyloss + var/mob/living/carbon/human/H + async = 1 + +/datum/unit_test/space_suffocation/start_test() + var/turf/space/T = locate() + + H = new(T) + startOxyloss = H.getOxyLoss() + + return 1 + +/datum/unit_test/space_suffocation/check_result() + if(H.life_tick < 10) + return 0 + + endOxyloss = H.getOxyLoss() + + if(startOxyloss < endOxyloss) + pass("Human mob takes oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])") + else + fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])") + + qdel(H) + return 1 diff --git a/code/unit_tests/research_tests.dm b/code/unit_tests/research_tests.dm new file mode 100644 index 0000000000..34c63b9d10 --- /dev/null +++ b/code/unit_tests/research_tests.dm @@ -0,0 +1,42 @@ +/datum/unit_test/research_designs_shall_be_unique + name = "RESEARCH: Designs Shall Be Unique" + +/datum/unit_test/research_designs_shall_be_unique/start_test() + var/list/ids = list() + var/list/build_paths = list() + + for(var/design_type in typesof(/datum/design) - /datum/design) + var/datum/design/design = design_type + if(initial(design.id) == "id") + continue + + group_by(ids, design, initial(design.id)) + group_by(build_paths, design, initial(design.build_path)) + + var/number_of_issues = number_of_issues(ids, "IDs") + number_of_issues += number_of_issues(build_paths, "Build Paths") + + if(number_of_issues) + fail("[number_of_issues] issues with research designs found.") + else + pass("All research designs are unique.") + + return 1 + +/datum/unit_test/research_designs_shall_be_unique/proc/group_by(var/list/entries, var/datum/design/entry, var/value) + var/designs = entries[value] + if(!designs) + designs = list() + entries[value] = designs + + designs += entry + +/datum/unit_test/research_designs_shall_be_unique/proc/number_of_issues(var/list/entries, var/type) + var/issues = 0 + for(var/value in entries) + var/list/list_of_designs = entries[value] + if(list_of_designs.len > 1) + log_unit_test("[type] - The following entries have the same value - [value]: " + english_list(list_of_designs)) + issues++ + + return issues diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm new file mode 100644 index 0000000000..b8acf60c21 --- /dev/null +++ b/code/unit_tests/unit_test.dm @@ -0,0 +1,99 @@ +var/all_unit_tests_passed = 1 +var/failed_unit_tests = 0 +var/total_unit_tests = 0 + +/datum/unit_test + var/name = "template" + var/disabled = "" + var/async = 0 + var/reported = 0 + +/datum/unit_test/proc/fail(var/message) + all_unit_tests_passed = 0 + failed_unit_tests++ + reported = 1 + log_unit_test("[ASCII_RED]!! FAILURE !! \[[name]\]: [message][ASCII_RESET]") + +/datum/unit_test/proc/pass(var/message) + reported = 1 + log_unit_test("[ASCII_GREEN]** SUCCESS ** \[[name]\]: [message][ASCII_RESET]") + +/datum/unit_test/proc/start_test() + fail("No test proc.") + +/datum/unit_test/proc/check_result() + fail("No check results proc.") + return 1 + + +/proc/initialize_unit_tests() + log_unit_test("Initializing Unit Testing") + + if(!ticker) + crash_with("No Ticker") + world.Del() + + var/said_msg = 0 + while(ticker.pregame_timeleft && ticker.pregame_timeleft > 160) // Make sure the initial startup is complete. + if(ticker.pregame_timeleft < 175 && !said_msg) + said_msg = 1 + log_unit_test("Pregame Count down has started, giving it 20 seconds to finish.") + sleep(1) + + world.save_mode("extended") + + sleep(1) + + ticker.current_state = GAME_STATE_SETTING_UP + + log_unit_test("Round has been started. Waiting 10 seconds to start tests.") + sleep(100) + + var/list/test_datums = typesof(/datum/unit_test) + + var/list/async_test = list() + var/list/started_tests = list() + + log_unit_test("Testing Started.") + + for(var/test in test_datums) + var/datum/unit_test/d = new test() + + if(d.disabled) + d.pass("[ASCII_RED]Check Disabled: [d.disabled][ASCII_RESET]") + continue + + if(findtext(d.name, "template")) + continue + + if(isnull(d.start_test())) // Start the test. + d.fail("Test Runtimed") + + if(d.async) // If it's async then we'll need to check back on it later. + async_test.Add(d) + total_unit_tests++ + + // + // Check the async tests to see if they are finished. + // + + while(async_test.len) + for(var/datum/unit_test/test in async_test) + if(test.check_result()) + async_test.Remove(test) + sleep(1) + + // + // Make sure all Unit Tests reported a result + // + + for(var/datum/unit_test/test in started_tests) + if(!test.reported) + test.fail("Test failed to report a result.") + + if(all_unit_tests_passed) + log_unit_test("[ASCII_GREEN]*** All Unit Tests Passed \[[total_unit_tests]\] ***[ASCII_RESET]") + world.Del() + else + log_unit_test("[ASCII_RED]!!! \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed !!![ASCII_RESET]") + world.Del() \ No newline at end of file diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm new file mode 100644 index 0000000000..a28abaa881 --- /dev/null +++ b/code/unit_tests/zas_tests.dm @@ -0,0 +1,119 @@ +#define UT_NORMAL 1 +#define UT_VACUUM 2 +#define UT_NORMAL_COLD 3 + +/datum/unit_test/zas_area_test + name = "ZAS: Area Test Template" + var/area_path = null + var/expectation = UT_NORMAL + +/datum/unit_test/zas_area_test/proc/test_air_in_area(var/test_area, var/expectation = UT_NORMAL) + var/test_result = list("result" = 0, "msg" = "") + + var/area/A = locate(test_area) + + if(!istype(A, test_area)) + test_result["msg"] = "Unable to get [test_area]" + return test_result + + var/list/GM_checked = list() + + for(var/turf/simulated/T in A) + if(!istype(T) || isnull(T.zone) || istype(T, /turf/simulated/floor/airless)) + continue + if(T.zone.air in GM_checked) + continue + + var/t_msg = "Turf: [T] | Location: [T.x] // [T.y] // [T.z]" + + var/datum/gas_mixture/GM = T.return_air() + var/pressure = GM.return_pressure() + var/temp = GM.temperature + + switch(expectation) + + if(UT_VACUUM) + if(pressure > 10) + test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" + return test_result + + + if(UT_NORMAL || UT_NORMAL_COLD) + if(abs(pressure - ONE_ATMOSPHERE) > 10) + test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" + return test_result + + if(expectation == UT_NORMAL) + + if(abs(temp - T20C) > 10) + test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]" + return test_result + + if(expectation == UT_NORMAL_COLD) + + if(temp > 120) + test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]" + return test_result + + GM_checked.Add(GM) + + if(GM_checked.len) + test_result["result"] = 1 + test_result["msg"] = "Checked [GM_checked.len] zones" + else + test_result["msg"] = "No zones checked." + + return test_result + +/datum/unit_test/zas_area_test/start_test() + var/list/test = test_air_in_area(area_path, expectation) + + if(isnull(test)) + fail("Check Runtimed") + + if(test["result"] == 1) + pass(test["msg"]) + else + fail(test["msg"]) + return 1 + +/datum/unit_test/zas_area_test/supply_centcomm + name = "ZAS: Supply Shuttle (CentComm)" + area_path = /area/supply/dock + +/datum/unit_test/zas_area_test/emergency_shuttle + name = "ZAS: Emergency Shuttle" + area_path = /area/shuttle/escape/centcom + +/datum/unit_test/zas_area_test/ai_chamber + name = "ZAS: AI Chamber" + area_path = /area/ai + +/datum/unit_test/zas_area_test/mining_shuttle_at_station + name = "ZAS: Mining Shuttle (Station)" + area_path = /area/shuttle/mining/station + +/datum/unit_test/zas_area_test/cargo_maint + name = "ZAS: Cargo Maintenance" + area_path = /area/maintenance/cargo + +/datum/unit_test/zas_area_test/eng_shuttle + name = "ZAS: Construction Site Shuttle (Station)" + area_path = /area/shuttle/constructionsite/station + +/datum/unit_test/zas_area_test/virology + name = "ZAS: Virology" + area_path = /area/medical/virology + +/datum/unit_test/zas_area_test/xenobio + name = "ZAS: Xenobiology" + area_path = /area/rnd/xenobiology + +/datum/unit_test/zas_area_test/mining_area + name = "ZAS: Mining Area (Vacuum)" + area_path = /area/mine/explored + expectation = UT_VACUUM + +/datum/unit_test/zas_area_test/cargo_bay + name = "ZAS: Cargo Bay" + area_path = /area/quartermaster/storage diff --git a/code/world.dm b/code/world.dm index 136228ccfc..4f89288c62 100644 --- a/code/world.dm +++ b/code/world.dm @@ -64,7 +64,12 @@ var/global/datum/global_init/init = new () . = ..() +#if UNIT_TEST + log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") + log_unit_test("If you did not intend to enable this please check code/__defines/unit_testing.dm") +#else sleep_offline = 1 +#endif // Set up roundstart seed list. plant_controller = new() @@ -105,6 +110,9 @@ var/global/datum/global_init/init = new () processScheduler.deferSetupFor(/datum/controller/process/ticker) processScheduler.setup() master_controller.setup() +#if UNIT_TEST + initialize_unit_tests() +#endif spawn(3000) //so we aren't adding to the round-start lag if(config.ToRban) diff --git a/config/example/config.txt b/config/example/config.txt index c04d181990..b38bfd7354 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -103,6 +103,9 @@ PROBABILITY WIZARD 1 PROBABILITY CHANGELING 1 PROBABILITY CULT 1 PROBABILITY EXTEND-A-TRAITORMONGOUS 6 +PROBABILITY LIZARD 1 +PROBABILITY INTRIGUE 1 +PROBABILITY VISITORS 1 ## Hash out to disable random events during the round. ALLOW_RANDOM_EVENTS diff --git a/config/names/last.txt b/config/names/last.txt index 5b41e53aae..6080967e2d 100644 --- a/config/names/last.txt +++ b/config/names/last.txt @@ -502,7 +502,6 @@ Stamos Sagan Hawking Dawkins -Goebbles McShain McDonohugh Power diff --git a/html/changelog.html b/html/changelog.html index d0d79d8f17..c743aadeef 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,54 @@ -->
+

17 April 2016

+

Datraen updated:

+
    +
  • Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272 by Razharas.
  • +
  • Teshari smocks now spawn as smocks, and not aqua jumpsuits.
  • +
  • Checks to see if new a two-handed weapon can be wielded when dropped.
  • +
+

EmperorJon updated:

+
    +
  • Robotics Console now correctly shows the operational/lockdown state and button based off if it thinks the synthetic is locked down or not.
  • +
  • Autotraitor synths now behave the same as Traitor synths - they are not locked down.
  • +
+

Kelenius updated:

+
    +
  • Solars now start wired.
  • +
+

Neerti updated:

+
    +
  • Ports Bay's volume-based inventory system. It works off by weight classes instead of just slots, allowing you to hold more light items than you could previously.
  • +
  • Bulky items can now go in your backpack, however it will require twice the space of a normal sized item.
  • +
  • Spacesuits, RIGs, and sniper rifles made heavier.
  • +
+ +

07 April 2016

+

Datraen updated:

+
    +
  • If a slice of an item is spawned independently, it will get generic settings.
  • +
+

Kelenius updated:

+
    +
  • Changelings will now change appearance and species together when transforming.
  • +
  • Changelings no longer have gender honorifics in lingchat.
  • +
  • Absorbing the DNA from any source will allow you to use its name, species, and languages.
  • +
  • DNA extract sting won't produce a strange message if there's no target.
  • +
  • Cultists no longer need to research words.
  • +
+ +

04 April 2016

+

Kelenius updated:

+
    +
  • Monkeys can ventcrawl once again.
  • +
+

Yoshax updated:

+
    +
  • Tasks that take time to perform now have a progress bar.
  • +
  • Visibility of progress bars can be toggled in preferences. Default is on.
  • +
+

29 March 2016

Datraen updated:

    @@ -67,6 +115,10 @@
  • Stops traitorborgs from being able to hack other borgs.
  • Stops traitorAIs from being able to hack unlinked borgs.
+

Yoshax updated:

+
    +
  • Player preferences has been overhauled. Please update your preferences, found at "Character Setup" > "Global" > "Preferences", as they have been reset.
  • +

16 March 2016

Datraen updated:

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ee6b447e18..5a36a0a5b7 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2198,3 +2198,43 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Artifacts will no longer spawn on floor turfs. - bugfix: Stops traitorborgs from being able to hack other borgs. - bugfix: Stops traitorAIs from being able to hack unlinked borgs. + Yoshax: + - tweak: Player preferences has been overhauled. Please update your preferences, + found at "Character Setup" > "Global" > "Preferences", as they have been reset. +2016-04-04: + Kelenius: + - bugfix: Monkeys can ventcrawl once again. + Yoshax: + - rscadd: Tasks that take time to perform now have a progress bar. + - rscadd: Visibility of progress bars can be toggled in preferences. Default is + on. +2016-04-07: + Datraen: + - bugfix: If a slice of an item is spawned independently, it will get generic settings. + Kelenius: + - tweak: Changelings will now change appearance and species together when transforming. + - tweak: Changelings no longer have gender honorifics in lingchat. + - rscadd: Absorbing the DNA from any source will allow you to use its name, species, + and languages. + - bugfix: DNA extract sting won't produce a strange message if there's no target. + - tweak: Cultists no longer need to research words. +2016-04-17: + Datraen: + - rscadd: Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272 + by Razharas. + - bugfix: Teshari smocks now spawn as smocks, and not aqua jumpsuits. + - bugfix: Checks to see if new a two-handed weapon can be wielded when dropped. + EmperorJon: + - bugfix: Robotics Console now correctly shows the operational/lockdown state and + button based off if it thinks the synthetic is locked down or not. + - bugfix: Autotraitor synths now behave the same as Traitor synths - they are not + locked down. + Kelenius: + - rscadd: Solars now start wired. + Neerti: + - rscadd: Ports Bay's volume-based inventory system. It works off by weight classes + instead of just slots, allowing you to hold more light items than you could + previously. + - rscadd: Bulky items can now go in your backpack, however it will require twice + the space of a normal sized item. + - rscdel: Spacesuits, RIGs, and sniper rifles made heavier. diff --git a/html/changelogs/PsiOmegaDelta-LoadoutDrinks.yml b/html/changelogs/PsiOmegaDelta-LoadoutDrinks.yml new file mode 100644 index 0000000000..50927ecb26 --- /dev/null +++ b/html/changelogs/PsiOmegaDelta-LoadoutDrinks.yml @@ -0,0 +1,4 @@ +author: PsiOmegaDelta +delete-after: True +changes: + - rscadd: "Can now prefill the loadout flask and vacuum-flask with a relevant liquid of your choice." diff --git a/html/changelogs/Yoshax-morepreferences.txt b/html/changelogs/Yoshax-morepreferences.txt deleted file mode 100644 index 9318611ecb..0000000000 --- a/html/changelogs/Yoshax-morepreferences.txt +++ /dev/null @@ -1,4 +0,0 @@ -author: Yoshax - -delete-after: True - - tweak Player preferences has been overhauled. Please update your preferences, found at "Character Setup" > "Global" > "Preferences", as they have been reset. \ No newline at end of file diff --git a/icons/effects/progessbar.dmi b/icons/effects/progessbar.dmi new file mode 100644 index 0000000000..99284060aa Binary files /dev/null and b/icons/effects/progessbar.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index f7d05cede0..154dc56390 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index af2de326ab..88976b245d 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index e548ba4afd..930b8aea70 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 3ea8a3254c..628f549548 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index e7d69759aa..a70edbe3c3 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 8082f74e48..ec10e508c7 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/zenghu.dmi b/icons/mob/human_races/cyberlimbs/zenghu.dmi index bf50878277..8694f1b16f 100644 Binary files a/icons/mob/human_races/cyberlimbs/zenghu.dmi and b/icons/mob/human_races/cyberlimbs/zenghu.dmi differ diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index ff683bc069..f8d3c1c23f 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 4b45b5f0af..265df7a2ad 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index f8ce408041..6e5777e4bf 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi index d72a362422..077b0e8040 100644 Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 5998df0b96..168bcdc99e 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 2222f74a78..0d8a4129d7 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index ca80f8ba10..ee54d17c87 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 1d3d0f0296..7fa721499b 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 32b620c75c..26a6110e38 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 2a6890778e..f97c5dd658 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index cc09803419..084392801d 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 04ce2aa9c7..e6094f3bb0 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index d8bcc7d184..f492aab688 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 5dff42780f..07e424112f 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index f3d2b6916c..137d43935f 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 726b9744f3..46a14253bd 100755 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index 7cd93084a0..48f81ffa1d 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -191,7 +191,7 @@ "adI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "adJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "adK" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/crew_quarters/locker) -"adL" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxstarboard) +"adL" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/starboard) "adM" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/maintenance/library) "adN" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_outer"; locked = 1; name = "Library Maintenance EVA External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) "adO" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "library_maint_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/library) @@ -215,7 +215,7 @@ "aeg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aeh" = (/obj/machinery/vending/coffee,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aei" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) -"aej" = (/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aej" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/solar/starboard) "aek" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "library_maint_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/maintenance/library) "ael" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor,/area/maintenance/library) "aem" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/camera/network/civilian{c_tag = "CIV - Library EVA"; dir = 1},/turf/simulated/floor,/area/maintenance/library) @@ -237,8 +237,8 @@ "aeC" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aeD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) -"aeF" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) -"aeG" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aeF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aeG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeJ" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/maintenance/library) @@ -435,7 +435,7 @@ "ais" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "ait" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "aiu" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) -"aiv" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aiv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/auxport) "aiw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library) "aix" = (/obj/machinery/door/window/northleft{name = "Library Desk Door"; req_access = list(37)},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/library) "aiy" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/wood,/area/library) @@ -694,7 +694,7 @@ "anr" = (/turf/simulated/wall,/area/hallway/secondary/escape/fore_escape_pod_hallway) "ans" = (/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) "ant" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) -"anu" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/turf/simulated/floor,/area/maintenance/library) +"anu" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/turf/simulated/floor,/area/maintenance/library) "anv" = (/obj/item/stack/material/glass,/turf/simulated/floor,/area/vacant/vacant_site) "anw" = (/turf/simulated/floor,/area/vacant/vacant_site) "anx" = (/obj/structure/table/reinforced,/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/vacant/vacant_site) @@ -937,7 +937,7 @@ "asa" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "asb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "asc" = (/obj/machinery/light,/obj/machinery/chem_master,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) -"asd" = (/obj/machinery/camera/network/security{c_tag = "EVA Northeast"; dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) +"asd" = (/obj/machinery/camera/network/security{c_tag = "SEC - Forensic Office"; dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "ase" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) "asf" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) "asg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) @@ -1353,7 +1353,7 @@ "aAa" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor,/area/security/riot_control) "aAb" = (/turf/simulated/floor,/area/security/riot_control) "aAc" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor,/area/security/riot_control) -"aAd" = (/obj/machinery/door/airlock/atmos{name = "Riot Control Maintenance"; req_access = list(2,12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/riot_control) +"aAd" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aAe" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/maintenance/security_starboard) "aAf" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/security_starboard) "aAg" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/maintenance/security_starboard) @@ -1653,10 +1653,10 @@ "aFO" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/turf/simulated/floor/tiled,/area/security/armoury) "aFP" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) "aFQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig) -"aFR" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/janitor) +"aFR" = (/obj/structure/mopbucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/obj/item/weapon/mop,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/janitor) "aFS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/warden) "aFT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) -"aFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden) "aFV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) "aFW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) "aFX" = (/turf/simulated/wall,/area/security/warden) @@ -1683,9 +1683,9 @@ "aGs" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor,/area/maintenance/security_starboard) "aGt" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor,/area/maintenance/security_starboard) "aGu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard) -"aGv" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/janitor) +"aGv" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/janitor) "aGw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) -"aGx" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/janitor) +"aGx" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/janitor) "aGy" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aGz" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aGA" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -1710,7 +1710,7 @@ "aGT" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aGU" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/tiled,/area/bridge_hallway) "aGV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aGW" = (/obj/item/frame,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/vacant/vacant_shop) +"aGW" = (/obj/machinery/door/airlock/atmos{name = "Riot Control Maintenance"; req_access = newlist(); req_one_access = list(2,12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/riot_control) "aGX" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stamp/qm,/turf/simulated/floor/tiled,/area/quartermaster/qm) "aGY" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "aGZ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury) @@ -1754,8 +1754,8 @@ "aHL" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard) "aHM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/security_starboard) "aHN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/security_starboard) -"aHO" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/janitor) -"aHP" = (/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/janitor) +"aHO" = (/obj/structure/closet/jcloset,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/janitor) +"aHP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/janitor) "aHQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/janitor) "aHR" = (/obj/machinery/light_switch{pixel_x = 34; pixel_y = 1},/obj/machinery/button/remote/blast_door{id = "janitor_blast"; name = "Privacy Shutters"; pixel_x = 26; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Custodial Closet"; dir = 9},/turf/simulated/floor/tiled,/area/janitor) "aHS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Aft 2"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) @@ -1818,7 +1818,7 @@ "aIX" = (/obj/machinery/door/blast/regular{dir = 1; id = "Cell 3"; name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) "aIY" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/security_starboard) "aIZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/security_starboard) -"aJa" = (/obj/structure/closet/jcloset,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor) +"aJa" = (/obj/structure/closet/jcloset,/turf/simulated/floor/tiled,/area/janitor) "aJb" = (/turf/simulated/floor/tiled,/area/janitor) "aJc" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/janitor) "aJd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/janitor) @@ -1884,8 +1884,8 @@ "aKl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/security_starboard) "aKm" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/janitor) "aKn" = (/obj/structure/window/reinforced,/obj/machinery/door/window/eastleft{name = "Janitorial Delivery"; req_access = list(26)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/janitor) -"aKo" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor) -"aKp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/janitor) +"aKo" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/janitor) +"aKp" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/janitor) "aKq" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor) "aKr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/lawoffice) "aKs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -1942,9 +1942,9 @@ "aLr" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access = list(26)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/janitor) "aLs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor) "aLt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled,/area/janitor) -"aLu" = (/obj/structure/janitorialcart,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor) +"aLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor) "aLv" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/steel,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/janitor) -"aLw" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -32},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor) +"aLw" = (/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor) "aLx" = (/obj/machinery/disposal,/obj/machinery/light,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/janitor) "aLy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aLz" = (/obj/machinery/button/remote/blast_door{id = "lawyer_blast"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -34; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Internal Affairs"; dir = 5},/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -2150,7 +2150,7 @@ "aPr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/pool) "aPs" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aPt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) -"aPu" = (/obj/structure/table/glass,/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aPu" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "aPv" = (/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,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) "aPw" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced,/obj/random/energy,/obj/random/energy,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "aPx" = (/obj/structure/cable/green{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/tiled,/area/security/range) @@ -2522,13 +2522,13 @@ "aWz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aWA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aWB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aWC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aWD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aWE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway) -"aWF" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) +"aWC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aWD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aWE" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) +"aWF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway) "aWG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) -"aWH" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) -"aWI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) +"aWH" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) +"aWI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) "aWJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/pool) "aWK" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway) "aWL" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway) @@ -3548,7 +3548,7 @@ "bql" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqm" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqn" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bqo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bqo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "bqp" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Armor"; dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/armoury) "bqq" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bqr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/medbay{c_tag = "MED - Cloning"; dir = 2},/turf/simulated/floor/tiled,/area/medical/genetics_cloning) @@ -3765,7 +3765,7 @@ "buu" = (/obj/structure/filingcabinet/chestdrawer{name = "Medical Forms"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) "buv" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled/white,/area/medical/reception) "buw" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bux" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bux" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buA" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) @@ -4013,7 +4013,7 @@ "bzi" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Console"; pixel_x = 22; pixel_y = 0; tag_exterior_door = "virologyq_airlock_exterior"; tag_interior_door = "virologyq_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology) "bzj" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Button"; pixel_x = -28; pixel_y = 0; req_access = list(39)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bzk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bzl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"bzl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/l3closet/virology,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) "bzm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bzn" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) "bzo" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "arrivals_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/research) @@ -4104,7 +4104,7 @@ "bAV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bAW" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/virology) "bAX" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bAY" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxport) +"bAY" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport) "bAZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bBa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bBb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -4202,13 +4202,12 @@ "bCP" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/medical/morgue) "bCQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/lime/full,/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) "bCR" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/wall/r_wall,/area/medical/virology) -"bCS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/simulated/floor/tiled/white,/area/medical/virology) +"bCS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/virology,/turf/simulated/floor/tiled/white,/area/medical/virology) "bCT" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) "bCU" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxport) "bCV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxport) -"bCW" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/auxport) -"bCX" = (/turf/simulated/floor/airless,/area/solar/auxport) -"bCY" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxport) +"bCW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port) +"bCX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/port) "bCZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = 26; pixel_y = -26; req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/auxport) "bDa" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/auxsolarport) "bDb" = (/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_tool_airlock"; pixel_x = 0; pixel_y = 28; req_access = list(13); tag_airpump = "solar_tool_pump"; tag_chamber_sensor = "solar_tool_sensor"; tag_exterior_door = "solar_tool_outer"; tag_interior_door = "solar_tool_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 0; pixel_y = -26},/turf/simulated/floor,/area/maintenance/auxsolarport) @@ -4300,7 +4299,6 @@ "bEJ" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/wardrobe/virology_white,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 8; pixel_y = 28; req_access = list(39)},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "bEK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bEL" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/steel,/area/medical/virology) -"bEM" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport) "bEN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bEO" = (/obj/structure/cable/yellow,/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Port Solar Control"; track = 0},/turf/simulated/floor,/area/maintenance/auxsolarport) "bEP" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/maintenance/auxsolarport) @@ -4567,7 +4565,7 @@ "bJQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) "bJR" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/rnd/rdoffice) "bJS" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/device/megaphone,/obj/item/weapon/pen,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) -"bJT" = (/obj/structure/closet/secure_closet/paramedic,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"bJT" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) "bJU" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bJV" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bJW" = (/obj/effect/floor_decal/corner/pink{dir = 4},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor/tiled/white,/area/assembly/robotics) @@ -4860,7 +4858,7 @@ "bPx" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bPy" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bPz" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bPA" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bPA" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/closet/wardrobe/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bPB" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/shower{pixel_y = 2},/obj/machinery/door/window/southright{name = "Shower"},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "bPC" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Port"; dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bPD" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -5042,7 +5040,7 @@ "bSX" = (/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway) "bSY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/bridge_hallway) "bSZ" = (/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/bridge_hallway) -"bTa" = (/obj/structure/closet/secure_closet/captains,/obj/item/clothing/head/beret/centcom/captain{desc = "A white captain's beret"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bTa" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bTb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bTc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/command{c_tag = "COM - Captain's Bedroom"; dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bTd" = (/obj/structure/displaycase,/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -6468,7 +6466,7 @@ "cut" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cuu" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cuv" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) -"cuw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) +"cuw" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (NORTH)"; icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cux" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) "cuy" = (/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor/tiled,/area/hydroponics) "cuz" = (/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) @@ -6480,7 +6478,7 @@ "cuF" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) "cuG" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) "cuH" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) -"cuI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11) +"cuI" = (/obj/item/frame/light,/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cuJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11) "cuK" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) "cuL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) @@ -6648,7 +6646,7 @@ "cxR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar) "cxS" = (/obj/structure/table/woodentable,/obj/item/clothing/head/cakehat,/obj/machinery/atm{pixel_y = 30},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cxT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"cxU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cxU" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cxV" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cxW" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,10,63)},/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/tiled/white,/area/medical/first_aid_station) "cxX" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 5"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) @@ -6852,6 +6850,7 @@ "cBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) "cBO" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) "cBP" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/camera/network/engineering{c_tag = "ENG - Solar Aft Port"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"cBQ" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cBR" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/wardrobe/red,/turf/simulated/floor/tiled,/area/security/checkpoint2) "cBS" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/docking_hallway) "cBT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) @@ -6890,9 +6889,9 @@ "cCA" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/apmaint) "cCB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/meter,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) "cCC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/maintenance/apmaint) -"cCD" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cCD" = (/obj/structure/closet/secure_closet/atmos_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cCE" = (/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) -"cCF" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cCF" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cCG" = (/turf/simulated/wall,/area/crew_quarters/sleep/engi_wash) "cCH" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) "cCI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) @@ -6926,7 +6925,7 @@ "cDk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/bar) "cDl" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/bar) "cDm" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/bar) -"cDn" = (/obj/item/stack/tile/floor,/turf/simulated/floor,/area/vacant/vacant_shop) +"cDn" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cDo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cDp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar) "cDq" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -7021,8 +7020,9 @@ "cFb" = (/obj/machinery/floor_light{anchored = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/crew_quarters/bar) "cFc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cFd" = (/obj/machinery/floor_light{anchored = 1},/turf/simulated/floor,/area/crew_quarters/bar) -"cFe" = (/obj/item/stack/tile/floor,/obj/item/frame/light,/turf/simulated/floor,/area/vacant/vacant_shop) +"cFe" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cFf" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) +"cFg" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Locker Room"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cFh" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 3"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) "cFi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) "cFj" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) @@ -7047,6 +7047,7 @@ "cFC" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cFD" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cFE" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 10"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) +"cFF" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cFG" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cFH" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cFI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage) @@ -7062,7 +7063,7 @@ "cFS" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cFT" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/apmaint) -"cFV" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cFV" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/weapon/storage/secure/safe{pixel_z = 30},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cFW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) "cFX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/checkpoint2) "cFY" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) @@ -7107,7 +7108,7 @@ "cGL" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/closet/crate,/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cGM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) "cGN" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/apmaint) -"cGO" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Locker Room"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cGO" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cGP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cGQ" = (/obj/structure/table/standard,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/circular_saw,/obj/item/weapon/hemostat,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "cGR" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) @@ -7223,7 +7224,7 @@ "cIX" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/quartermaster/warehouse) "cIY" = (/obj/structure/closet/crate/medical,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cIZ" = (/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) -"cJa" = (/turf/simulated/floor,/area/vacant/vacant_shop) +"cJa" = (/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cJb" = (/obj/structure/closet/crate/freezer,/obj/effect/floor_decal/corner/brown/full{dir = 4},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cJc" = (/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) "cJd" = (/obj/machinery/camera/network/engineering{c_tag = "Atmos Tank - Gas Mixing"; dir = 2},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) @@ -7348,6 +7349,7 @@ "cLs" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) "cLt" = (/obj/machinery/power/smes/buildable{charge = 2e+006; RCon_tag = "Substation - Atmospherics"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/engineering/atmos/storage) "cLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engineering/atmos/storage) +"cLv" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cLw" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Engine Waste")},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "cLx" = (/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "cLy" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/blast_door{id = "atmoslockdown"; name = "Atmospherics Lockdown"; pixel_x = 0; pixel_y = 24; req_access = newlist(); req_one_access = list(10,24)},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) @@ -7435,7 +7437,7 @@ "cNc" = (/turf/simulated/floor/tiled,/area/engineering/foyer) "cNd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) "cNe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) -"cNf" = (/obj/item/weapon/crowbar,/turf/simulated/floor,/area/vacant/vacant_shop) +"cNf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) "cNg" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cNh" = (/obj/machinery/computer/atmos_alert,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cNi" = (/obj/machinery/computer/station_alert/all,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) @@ -7502,6 +7504,7 @@ "cOr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer) "cOs" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "cOt" = (/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cOu" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -32},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/janitor) "cOv" = (/obj/machinery/computer/security/telescreen{desc = "Used to monitor the engine room."; layer = 3.3; name = "Engine Monitor"; network = list("Engine"); pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cOw" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts."; id = "engine_access_hatch"; name = "Engine Hatch Bolt Control"; pixel_x = -6; pixel_y = 32; req_access = newlist(); specialfunctions = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = 6; pixel_y = 32; req_access = newlist()},/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cOx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/meter,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/engineering) @@ -7516,7 +7519,7 @@ "cOG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/maintenance/evahallway) "cOH" = (/obj/structure/closet,/obj/item/clothing/glasses/welding,/obj/item/weapon/weldingtool,/obj/effect/decal/cleanable/dirt,/obj/item/clothing/shoes/workboots,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cOI" = (/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva) -"cOJ" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cOJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/janitor) "cOK" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cOL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cOM" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) @@ -7525,7 +7528,7 @@ "cOP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/docking_lounge) "cOQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/docking_lounge) "cOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) -"cOS" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cOS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11) "cOT" = (/obj/effect/decal/cleanable/blood/oil,/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/bar) "cOU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/bar) "cOV" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/bar) @@ -7541,24 +7544,26 @@ "cPf" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPg" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPh" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) +"cPi" = (/obj/item/frame,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cPj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPl" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{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/tiled,/area/crew_quarters/visitor_lodging) "cPm" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPn" = (/turf/simulated/wall,/area/crew_quarters/visitor_lodging) -"cPo" = (/obj/random/tech_supply,/turf/simulated/floor,/area/vacant/vacant_shop) +"cPo" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cPp" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPq" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPr" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Lodging"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPs" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPt" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPu" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) -"cPv" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor,/area/vacant/vacant_shop) +"cPv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cPw" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPx" = (/turf/simulated/wall,/area/crew_quarters/visitor_laundry) "cPy" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPz" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPA" = (/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) +"cPB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) "cPC" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPD" = (/obj/structure/closet/wardrobe/pjs,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPE" = (/obj/structure/closet/wardrobe/pjs,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) @@ -7596,7 +7601,7 @@ "cQk" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce/equipped,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cQl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/engineering) "cQm" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor,/area/maintenance/evahallway) -"cQn" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cQn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cQo" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge) "cQp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cQq" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge) @@ -7742,7 +7747,7 @@ "cTa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) "cTb" = (/obj/structure/flora/pottedplant{icon_state = "plant-20"; tag = "icon-plant-22"},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cTc" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) -"cTd" = (/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/camera/network/engineering{c_tag = "ENG - CE's Office"; dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cTd" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cTe" = (/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cTf" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cTg" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) @@ -7804,7 +7809,7 @@ "cUk" = (/turf/simulated/wall,/area/crew_quarters/heads/chief) "cUl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) "cUm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) -"cUn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"cUn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cUo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) "cUp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/engineering) "cUq" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/maintenance/evahallway) @@ -7937,7 +7942,7 @@ "cWN" = (/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos) "cWO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/escape/dock_escape_pod_hallway_port) "cWP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/break_room) -"cWQ" = (/obj/item/frame/light,/turf/simulated/floor,/area/vacant/vacant_shop) +"cWQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/bar) "cWR" = (/obj/item/frame/light,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cWS" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/break_room) "cWT" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/red{dir = 9},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/foyer) @@ -8089,6 +8094,7 @@ "cZJ" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) "cZL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/window/westleft{name = "Engineering Reception Desk"; req_access = list(10); req_one_access = newlist()},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) +"cZM" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/bar) "cZN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZO" = (/obj/machinery/door/airlock/glass_engineeringatmos{name = "Engineering Monitoring Room"; req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "cZP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) @@ -8142,6 +8148,7 @@ "daL" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "daM" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "daN" = (/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"daO" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "ENG - CE's Office"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "daP" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "daQ" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos) "daR" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8235,14 +8242,14 @@ "dcB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering) "dcC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering) "dcD" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dcE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/vacant/vacant_shop) +"dcE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "dcF" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcG" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcJ" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop) "dcK" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/machinery/door/window/southright{name = "Jetpack Storage"; req_one_access = list(11,24)},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva) -"dcL" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor,/area/vacant/vacant_shop) +"dcL" = (/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "dcM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,47)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/engineering) "dcN" = (/obj/structure/closet,/obj/item/weapon/lipstick/purple,/turf/simulated/floor/plating,/area/maintenance/engineering) "dcO" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engineering) @@ -8255,7 +8262,7 @@ "dcV" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/port) "dcW" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D1) "dcX" = (/turf/simulated/wall,/area/hallway/secondary/entry/D1) -"dcY" = (/obj/item/frame/apc,/turf/simulated/floor,/area/vacant/vacant_shop) +"dcY" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dcZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dda" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "ddb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/workshop) @@ -8274,7 +8281,7 @@ "ddo" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D4) "ddp" = (/obj/structure/table/steel,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/construction) "ddq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/maintenance/bar) -"ddr" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/bar) +"ddr" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dds" = (/turf/simulated/wall,/area/hallway/secondary/entry/D4) "ddt" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/machinery/door/window/southleft{name = "Jetpack Storage"; req_access = newlist(); req_one_access = list(11,24)},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "ddu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8403,6 +8410,7 @@ "dfN" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/suit/space/void/engineering,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northright{name = "Engineering Hardsuits"; req_access = list(11)},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dfO" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_6"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_6_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod6/station) "dfP" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_5_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station) +"dfQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dfR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dfS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) @@ -8628,9 +8636,9 @@ "dkf" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "co2_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "dkg" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "dkh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) -"dki" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) -"dkj" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) -"dkk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"dki" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"dkj" = (/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"dkk" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Phoron"; dir = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dkl" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "n2o_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dkm" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dkn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) @@ -8681,7 +8689,7 @@ "dlg" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) "dlh" = (/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "dli" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) -"dlj" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"dlj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) "dlk" = (/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dll" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dlm" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) @@ -8738,7 +8746,7 @@ "dml" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dmm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/port) "dmn" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Carbon Dioxide"; dir = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) -"dmo" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Phoron"; dir = 1},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"dmo" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 10},/turf/simulated/floor,/area/maintenance/pool) "dmp" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Nitrous Oxide"; dir = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dmq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/engineering/drone_fabrication) "dmr" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) @@ -8856,7 +8864,6 @@ "doz" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "doA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "doB" = (/turf/space,/area/syndicate_station/southeast) -"doC" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/port) "doD" = (/obj/structure/lattice,/obj/item/stack/cable_coil/yellow{pixel_x = 2; pixel_y = 2},/obj/item/stack/cable_coil/yellow,/turf/space,/area/space) "doE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3) "doF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/maintenance/portsolar) @@ -8913,9 +8920,6 @@ "dpE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dpF" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) "dpG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port) -"dpH" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/port) -"dpI" = (/turf/simulated/floor/airless,/area/solar/port) -"dpJ" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) "dpK" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port) "dpL" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dpM" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access = list(13); tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -8963,7 +8967,6 @@ "dqC" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dqD" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dqE" = (/turf/simulated/wall,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard) -"dqF" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/port) "dqG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/maintenance/portsolar) "dqH" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable/yellow,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dqI" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Dock"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -9491,7 +9494,6 @@ "dAK" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) "dAL" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room) "dAM" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dAN" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard) "dAO" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 8},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room) "dAP" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/turf/simulated/floor,/area/engineering/engine_room) "dAQ" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9504,7 +9506,6 @@ "dAX" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dAY" = (/obj/machinery/atmospherics/pipe/manifold/visible/black,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dAZ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dBa" = (/turf/simulated/floor/airless,/area/solar/starboard) "dBb" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/wall/r_wall,/area/engineering/engine_room) "dBc" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_room) "dBd" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "EngineVent"; name = "Reactor Vent"; p_open = 0},/turf/simulated/floor/reinforced,/area/engineering/engine_room) @@ -9514,8 +9515,6 @@ "dBh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EJECTION/VENTING PORT'."; name = "\improper EJECTION/VENTING PORT"; pixel_y = 32},/turf/space,/area/space) "dBi" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard) "dBj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard) -"dBk" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/starboard) -"dBl" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/starboard) "dBm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard) "dBn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard) "dBo" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/structure/lattice,/turf/space,/area/space) @@ -9523,7 +9522,6 @@ "dBq" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) "dBr" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/skipjack_station/southwest_solars) "dBs" = (/turf/space,/area/skipjack_station/southeast_solars) -"dBt" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/starboard) "dBu" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard) "dBv" = (/turf/space,/area/syndicate_station/south) "dBw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9549,7 +9547,7 @@ "dBQ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "dBR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "dBS" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/bar) -"dBT" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"dBT" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"},/turf/simulated/floor,/area/maintenance/pool) "dBU" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dBV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dBW" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) @@ -9660,16 +9658,41 @@ "dDX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/item/clothing/glasses/sunglasses,/obj/structure/closet/crate,/turf/simulated/floor,/area/maintenance/engineering) "dDY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard) "dDZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) +"dEa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/storage) "dEc" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 28},/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/storage) "dEd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor,/area/engineering/storage) "dEe" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/deck/cards,/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) +"dEf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEg" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 10},/obj/machinery/camera/network/engineering{c_tag = "ENG - Pump Station"; dir = 2},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "dEi" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"dEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEl" = (/turf/simulated/wall,/area/medical/first_aid_station) +"dEm" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEn" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEo" = (/turf/simulated/wall,/area/maintenance/engineering/pumpstation) +"dEp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEq" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid) "dEs" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid) +"dEt" = (/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid) +"dEv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEw" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEy" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEz" = (/obj/machinery/atmospherics/binary/pump/high_power/on{name = "Pump station in"; target_pressure = 4500},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/red,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEB" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEC" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dED" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEE" = (/obj/machinery/atmospherics/tvalve/mirrored/digital/bypass{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEG" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEH" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEI" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEJ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/storage) "dEK" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/storage) "dEL" = (/turf/simulated/mineral,/area/mine/explored/upper_level) @@ -9692,10 +9715,17 @@ "dFc" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (WEST)"; icon_state = "register_idle"; dir = 8},/obj/machinery/door/blast/shutters{dir = 4; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "dFd" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/glass_jar,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/turf/simulated/floor/wood,/area/crew_quarters/bar) "dFe" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) -"dFf" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) +"dFf" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFh" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFi" = (/obj/structure/table/steel_reinforced,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/red{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFl" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dFm" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFn" = (/obj/machinery/flasher/portable,/obj/machinery/camera/network/security{c_tag = "Armoury"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFo" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"dFp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dFq" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFr" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFs" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) @@ -9729,6 +9759,9 @@ "dFU" = (/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dFW" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "Weapons locker"; req_access = list(2)},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"dFX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFY" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFZ" = (/obj/machinery/atmospherics/binary/passive_gate{dir = 8; target_pressure = 4500},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dGa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGb" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/armoury) @@ -9740,9 +9773,11 @@ "dGi" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGk" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Riot Armor"},/obj/item/clothing/gloves/arm_guard/riot,/obj/item/clothing/shoes/leg_guard/riot,/obj/item/clothing/suit/armor/riot/alt,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGl" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dGm" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red{dir = 9},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Riot Armor"},/obj/item/clothing/gloves/arm_guard/riot,/obj/item/clothing/shoes/leg_guard/riot,/obj/item/clothing/suit/armor/riot/alt,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGn" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full,/obj/machinery/door/window/brigdoor/northleft{name = "Combat Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGo" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full{tag = "icon-corner_white_full (EAST)"; icon_state = "corner_white_full"; dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Combat Armor"},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGp" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dGq" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/yellow/full{tag = "icon-corner_white_full (WEST)"; icon_state = "corner_white_full"; dir = 8},/obj/machinery/door/window/brigdoor/southleft{name = "Combat Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGr" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/yellow/full{dir = 1},/obj/machinery/door/window/brigdoor/southright{name = "Combat Armor"},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGs" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 1},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/door/window/brigdoor/westright{name = "Bullet Armor"},/obj/item/clothing/gloves/arm_guard/bulletproof,/obj/item/clothing/shoes/leg_guard/bulletproof,/obj/item/clothing/suit/armor/bulletproof/alt,/obj/item/clothing/head/helmet/bulletproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) @@ -9750,6 +9785,16 @@ "dGu" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/door/window/brigdoor/westleft{name = "Bullet Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/bulletproof,/obj/item/clothing/shoes/leg_guard/bulletproof,/obj/item/clothing/suit/armor/bulletproof/alt,/obj/item/clothing/head/helmet/bulletproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGw" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGx" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGy" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGz" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGB" = (/obj/machinery/door/airlock/atmos{name = "Pump Station Atmospherics"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGC" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"},/turf/simulated/floor,/area/maintenance/medbay_fore) +"dGE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGF" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 15000},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/medbay_fore) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9807,23 +9852,23 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaadaaaacOaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahabXacPacCacCacQacCacRacSacSacSacTabmacUacVabCabCacWacXacuacYacZacuayEacuadaacwaaSabtadbaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadadcaadacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaddaddaddabXaclacmadeacoadfadgacladhadiabXadjabYadkabmadladmadnadoadpadqadoadradoadsadtaduadvadwaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczacAacAaaaaaaaaaadxaaaaaaaaaacAacAaczaczaczaaaaaaadyaddaddaddaddaddaddadzadzabXabXabXabXabXabXabXabXabXabXabXaaeabYadAadBadBadCadDadEadFadGadHadIacuadJadKaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadLaadaadaaaaadaaaaaaaaaaczaaaaaaadMadNadOadPadQadRadSadTadUadVadWadXadYadZaeaadVadVaebaecaddaboaedaeeabcaboabTacuacuaefacJacuaegacuadJaehaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaaaaekadNaelaemaenaeoaepaeqaeqaeraesaeraetaeraeraeraeraeraeraeuaevaewaexaeyaboabTaezacuaeAacuacuaegacuaeBaeCaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaaaaddaddaddaddaddaeJaeKaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePaddaeQabYaeRaeSaeTabTaeUacuaeVacuaeWaegacuaeXaeYaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaaaaahaahaahaahaddaddaeKaeMaeMafaafbafcafdafeafbaffaeMaeMaddaddaaNafgafhafiaaNabTafjacuafkaflaflafmaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaacOaaaaaaaahaahaahaahaahaddafnaeMafoafcafpafqafrafsaftaftafuaeMaahaahaaNabYafvafwaaNafxafyafyafzaflafAafBafCafDafEaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyaywaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahaahaahaahaahaddaddafnaeMafSafTafUafVafWafXafYafcafZaeMaahaahaaNagaafvagbaaNafxagcagdageaflagfaggaggaghafEaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaahaahaahaahaahaddagiagjaeMafcafcagkaglaglaglagmafcafcaeMaahaahaaNagnagoagpaaNabTabTabTabTaflaflagqaflaflaflaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahaahaahaahaahaddagragsaeMagtaguagkafcagvafcagwaguagxaeMaahaahaaNabYafvafwaaNaahaahaahaahaflagyaggagzaflagAagBaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaddafnaddaeMaeMaeMagCagDagEagFagGaeMaeMaeMagHaahaaNagIagJagKaaNaahaahaahaahaflagyagLagzaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahagMagMagMagMagMafnaddagNagNagOagPagQagRagSagTagUagVagVagHaahaaNabYafvafwaaNaahaahaahaahaflaflaflaflaflaahaahaaSagWaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaaaacAaaaaahagMagXagYagZahaagjaddahbahcahcahdahcahcahcaheahfahfahgagHaahaaNahhahiahjaaNaahaahaahaahaahaahaahaahaahaahaahaaSahkaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahagMahlahmahnahoahpaddahqahqagUagPagQahrahsagTagUahtahtagHaahahuahvahwahxahuaahahyaahaahaahaahaahaahaahaahaahaaSahzaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahagMahAahBagMagMahCaddahDahfahfahEahFahGahHahIahcahcahJagHaahahuahKahLahMahNahyahyahOahOahOahOahOahOahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahagMahoahPagMahQahRaddahSahSagUagPahTahUahVagTagUagUahWagHaahahuahXahYahMahZahyahyahOaiaaibaicaidaieahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaaaacAaaaaahaddaifaigaihaihagsaddaiiagUagUagPaijaikailagTagUagUaimagHaahahuainahYahMaioaipaiqairaisaitaieaieaiuahOaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaaaaaaaaaaaaaaaaaaaivaaaaaaaaaaaaaaaaaaaaaacAaaaaahaddaiwaddaddaddaddaddaixaiyaizagPagQahragSagTagUaiAaiBagHaahahuaiCaiDaiEaiFaiFaiFaiGaiHaiIaiJaiKaiLahOaahaahaaSabtabvaaSaaSaahaahaaSaaSaaSaaSaaSaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaadaadaaaaadaaaaaaaaaaczaaaaaaadMadNadOadPadQadRadSadTadUadVadWadXadYadZaeaadVadVaebaecaddaboaedaeeabcaboabTacuacuaefacJacuaegacuadJaehaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaaaaekadNaelaemaenaeoaepaeqaeqaeraesaeraetaeraeraeraeraeraeraeuaevaewaexaeyaboabTaezacuaeAacuacuaegacuaeBaeCaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaaaaddaddaddaddaddaeJaeKaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePaddaeQabYaeRaeSaeTabTaeUacuaeVacuaeWaegacuaeXaeYaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaadacAaaaaaaaahaahaahaahaddaddaeKaeMaeMafaafbafcafdafeafbaffaeMaeMaddaddaaNafgafhafiaaNabTafjacuafkaflaflafmaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaaaaaaaaaaadaaaaaaaaaacOaaaaaaaahaahaahaahaahaddafnaeMafoafcafpafqafrafsaftaftafuaeMaahaahaaNabYafvafwaaNafxafyafyafzaflafAafBafCafDafEaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyaywaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaahaahaahaahaahaddaddafnaeMafSafTafUafVafWafXafYafcafZaeMaahaahaaNagaafvagbaaNafxagcagdageaflagfaggaggaghafEaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaadacAaaaaahaahaahaahaahaddagiagjaeMafcafcagkaglaglaglagmafcafcaeMaahaahaaNagnagoagpaaNabTabTabTabTaflaflagqaflaflaflaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaaaaaaaaaaadaaaaaaaaaaczaaaaahaahaahaahaahaddagragsaeMagtaguagkafcagvafcagwaguagxaeMaahaahaaNabYafvafwaaNaahaahaahaahaflagyaggagzaflagAagBaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaddafnaddaeMaeMaeMagCagDagEagFagGaeMaeMaeMagHaahaaNagIagJagKaaNaahaahaahaahaflagyagLagzaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaahagMagMagMagMagMafnaddagNagNagOagPagQagRagSagTagUagVagVagHaahaaNabYafvafwaaNaahaahaahaahaflaflaflaflaflaahaahaaSagWaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaaaacAaaaaahagMagXagYagZahaagjaddahbahcahcahdahcahcahcaheahfahfahgagHaahaaNahhahiahjaaNaahaahaahaahaahaahaahaahaahaahaahaaSahkaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaaaaaaaaaaadaaaaaaaaaaczaaaaahagMahlahmahnahoahpaddahqahqagUagPagQahrahsagTagUahtahtagHaahahuahvahwahxahuaahahyaahaahaahaahaahaahaahaahaahaaSahzaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaahagMahAahBagMagMahCaddahDahfahfahEahFahGahHahIahcahcahJagHaahahuahKahLahMahNahyahyahOahOahOahOahOahOahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaahagMahoahPagMahQahRaddahSahSagUagPahTahUahVagTagUagUahWagHaahahuahXahYahMahZahyahyahOaiaaibaicaidaieahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaaaacAaaaaahaddaifaigaihaihagsaddaiiagUagUagPaijaikailagTagUagUaimagHaahahuainahYahMaioaipaiqairaisaitaieaieaiuahOaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaaaaaaaaaaaaaaaaaaadxaaaaaaaaaaaaaaaaaaaaaacAaaaaahaddaiwaddaddaddaddaddaixaiyaizagPagQahragSagTagUaiAaiBagHaahahuaiCaiDaiEaiFaiFaiFaiGaiHaiIaiJaiKaiLahOaahaahaaSabtabvaaSaaSaahaahaaSaaSaaSaaSaaSaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAaadaadaadadxaadaadaadacAacAacAacAacAaaaaahaddaiwaddaiMaiMaiNaiOagUagUaiPagPagUagUagUagTagUaiQaiRagHaahahuaiSahYahMaiTaipaiqairaieaiUaieaiVaiWahOaahaahaaSabtabtaiXaaSaaSaaSaaSaiYabtabHaiZaiZaiZaiZaiZaiZaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaadxaaaaaaaaaaaaaaaaadaadaaaaaaaahaddaiwaddajaajbajcajdajeajeajfajgajeajeajeajhagUajiajiagHaahahuahvahYahMahZahyahyahOajjajkajlaieajmahOaahaahaaSaaSabtajnajoajoajoajoajoajpabIaiZajqajrajsajsaiZaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaadxaaaaaaaaaaaaaadaadaaaaaaaaaaahaddaiwaddajtajuajvaiOagUagUajwajxajyajzajzajAajzajzajBagHaahahuajCahwajDajEahyahyahOahOahOahOahOahOahOaahaahaahaaSaaSaaSaaSaaSaaSaaSaaSajFaiZaiZajGajHajsajsaiZaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9845,21 +9890,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiatiatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatIasQatJatKatLatMasRanratNatOatNanraahaahaahaahaahaahanratPatQatRanranraahaahaahamXamXatSatTatUanzatVatWatXatYatZamYauaaubaoDaoDaucaudamYamYaahahuahvahwaueaKFaKHaKGaLTaLSdEOdEOaahaahakzaqFaufaugaqIaqJaqKauhaugaqFakzaahaahaahaahanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiauiaujaukaulaumaunauoaupauqaurausautauuauvauwauxauyauzauAauBauCauBauDauEauFauGauHauGauIasQauJauKauLauMasRaahatNauNatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahamXamXamXauPamXamXamXamXamXamXamYamYamYauQauRamYamYamYaahaahahudEsdErdEuaMnaMXaMWaMZaMYaNadEOaahaahakzauSauTakzauUauVauWakzauSauTakzahyaahaahanZanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahyahyahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahaahavCavDavEavFavCaahaahaahaahaahahyahyahyahyaahaahaahaahaahahuahvameahMahuaOpaNbaLTaOqaOrdEOaahaahahyahyahyavGavHavIavJavGahyahyahyahyahyanZanZarOarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsaOsaOuaOtaPudEOaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsaOsaOuaOtaAddEOaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahaahaahaahaahaxsdFmdFnazHdFoaytayuaxsaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCaxiawnavEawnaxjavCavCavCavCavCavCaxfaxgaxhavCavCavCavCavCaxkaxlaxmaxdaxnawsawsaPvawsawsawsawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsanZanZaxrarNanZanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaALaALaALaALaALaALaALaxsdFqdFqazHazHdFrdFraxsaahatiaxtaxuaxvaxwaxxaxyavdavQaxzaxAavfaxBaxCaxDaxEaxFaxGavfawPaxHaxIawQawRaxJaxKaxKaxKaxKaxKaxKaxKaxLaxLaxLaxLaxLaahatNauNatNatNatNatNatNatNatNaxMawnaxNaxOaxPaxQaxRaxSaxTaxQaxQaxUaxVaxQaxWaxQaxQaxRaxQaxQaxXaxYaxQaxQaxZaxQaxTayaaxQaxQaxRaxQaybaycaxPaydayeayfayfaygayhayiayfayjayfayfaykayfaylaxqavJaymaynayoaymaypanZarOarOayqanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaxsdFsdFsazHazHdFtdFuaxsaahatiayxayyayzatiayAavbavdayBayCayDavfaEqayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPazXaySayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazhaziazjazjazgazkaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvazxazyazvazvazvazvazzazAazvazvazBaymazCazDarOazEazFanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazYaBiayPaCdaCcayPazZaAaaAbaAcaAdaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazYaBiayPaCdaCcayPazZaAaaAbaAcaGWaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALdFAaDxaDxaDxdFBdFDdFCaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDdaDeayPaIoaDgayPaBjaBkaBlayXayXaBmaBnaBoatNatNaahatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsanZanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALdFEaDxdFGdFFdFHdFFdFJdFIaALaBAaBBazHazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPaIpayPayPayPaIqayPayXaCeayXayXaAeaCfayZauNatNaahaahaahaahaahaahavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaJFdEiaDfaJHaDhaDiaDjaAeaDkaDlauNatNaahaahaahaahaahaahaahavCaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaahaahaahaahaahavCaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaahaahaFmaFmaFmaFmaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALbaDaPwbfbaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaFKaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaFmaHOaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFabnNaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaKoaKpaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPbqpaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaJFdEiaDfaJHaDhaDiaDjaAeaDkaDlauNatNaahaahaahaFmaFmaFmaFmaFmaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaFmaFmaGvaFRaGxaFmaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaFmaFmaHOaHPaHQaJbaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALbaDaPwbfbaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaFmaJaaJbaHPaHQaJbaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaFKaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaKoaJbaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaKpaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFabnNaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaLwaLuaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPbqpaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtcOJaLvcOuaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGndGoaDxdFPbsdaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaEAaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGqdGraDxdFPdGsaALaJJaNcaNdaNeaNeaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraNsaFaaNtaNuaFaaNvaNwaFaaNxaNyaFaaLmaNzaNAaNBaNCaNDaNEaNFaNEaLmaNGaFhaFhaahaahatNaNHaNIatNaahaNJaNKaNLaNMaNNaNOaNPaxlaxmawnaFoaNQaNRaJkaJkaNSaFoahyaCjaNTaNUaNVaNWaNXaNYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaNZaOaaObaOcaOdaOdaOdaOeaOdaOfaOdaOgaOdaOhaOiaOjaKBaKCaKCaOkaOlaOmaKCaKCaKDaGRaOnaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGtaDxaJGaDxaDxaDxdGvdGuaALaJJaLUaOvaOwaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaMdaOGaOHaKSaOIaOJaOKaOLaOMaFaaONaOOaOPaLmaLmaOQaLmaORaFhaOSaOTaOTaOUaFaaFaaOVaFaaFaaahaahaahatNatNaNIatNaahaNJaOWaOXaOYaOZaOXaPaaxlaxmawnaJjaJkaPbaPcaJkaKuaFoahyaCjaPdaPeaGDaPfaPgaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaPhaLIaIcaPiaPjaPlaPlaPlaPmaPnaPoaPlaPpaPlaPraPsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaPtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9872,17 +9917,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaTvaTwaTwaSXaTxaTyaTzaTAaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaTBaTCaTDaTEaTFaTGaRTahyahyaTfaTfaQraTIaQraTfaTfaTfaTJaTKaTJaTfaTfahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyaTfaTfaTfaTfaTfaahaahaahaahaTfatNaTLatNaTfaahaahaahahyahyahyavCavCaTMaTNaTMavCaToaToaTOaTPaTQaToaToaCjaTRaCjaCjaahaahaahaahahyahyahyahyahyahyahyahyahyaFpaDpaQVaDraQkaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaTSaTTaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUeaTfaUfaTkaUgaTkaUhaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaUsaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaRfaRfaRfaRfaUHaUHaRfaRfaRfaRfaRfaRfaUIaUIaUIaUIaUIaUIaUJaUKaULaSxaTcaUMaSxaSxaUNaUOaUPaUNaUNaUQaTkaURaUSaUTaUTaUUaUVaUTaUWaUTaUTaUUaUTaUTaUTaUXaUYaUTaUZaUTaUTaUTaUTaUSaUTaUTaUTaUUaUTaVaaUSaUUaUTaUTaVbaVcaVdaUTaVeaTkaTJaTkaVfaTkaVgaTkaTkaVhaTkaTkaTlaTkaTkaViaVjaUvaUvaVkaVlaVmaVnaVoaVnaVpaVqaVraZQaVsaVtaVnaVnaVuaVvaVnaVnaVwaVxaVyaVnaVnaVzaVAaLIaUAaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaVBaVCaFJaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWEaWFaWGaWHaWIaWIaWIaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaYbaLIaLIaUyaDtaYcaYdaYeaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaRfaYfaYgaYhaYiaYjaRfaRfaRfaRfaYkaYlaYmaRfaUIaUIaUIaUIaUIaUIaUbaYnaYnaYnaUcaUIaUIaYhaTfaYoaYpaYqaYraYsaTfaYtaTkaTkaTkaYuaTfaTfaTfaTfaTfaTfaYvaYwaUgaYxaYvaTfaTfaTfaTfaTfaTfaYyaYzaYAaTfaUqaYBaUraTfaTfaUqaYBaUraTfaYCaYDaYEaTfaUqaYBaUraTfaTfaUqaYBaUraToaRjaYGaYHaUwaYIaToaClaYJaYKaYLaClaYJaYKaYLaClaClaClaYMaUAaClaClaClaClaClaClaUAaYNaUAaClaClaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaRfaRfaRfaRfaRfaRfaRfaahaahaRfaYOaYOaYOaRfaahaahaahaahaYPaYQaYRaYRaYRaYRaYRaYSaYPahyaTfaTfaYTaYUaYVaTfaTfaTfaYWaYXaYYaTfaTfaahaahaahaahaahaYZaZaaZbaZcaYZaahaahaahaahaahaTfaZdaZeaZdaTfahyahyahyahyahyahyahyahyaZfaZgaZhaZiaZfahyahyahyahyahyahyahyahyaToaToaZjaZkaZlaToaToahyahyahyahyahyahyahyahyahyahyaClaYMaUAaClaahaahaahaahaZmaZmaZnaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpaZqaZraZoaahaahaahaahaYPaZsaZtaZuaZvaZwaZxaYRaYPahyahyaZyaZzaZAaZBaZyahyaTfaUiaThaTiaTfaahaahaZCaZCaZCaZCaZDaZDaZEaZDaZDaZFaZFaZFaZFaahaZdaZGaZHaZdahyahyahyahyaZIaZJaZKaZLaZIaZIaZMaZNaZOaZIaZIaZJaZKaZLaZIahyahyahyahyaZPaYGaYHaUwbaAaZRaZRaZSaZTaZUaZRaZSaZTaZUaZRaZRaZRaZVaZRaZRaahaahaahaahaahaZmaZWaZXaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbKMbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfbbgaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCdCqbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdObdObdObezbeAaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfaaFLbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWFaWEaWIaWHdljdljdmoaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaYbaLIaLIaUyaDtaYcaYdaYeaDtdBTaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaRfaYfaYgaYhaYiaYjaRfaRfaRfaRfaYkaYlaYmaRfaUIaUIaUIaUIaUIaUIaUbaYnaYnaYnaUcaUIaUIaYhaTfaYoaYpaYqaYraYsaTfaYtaTkaTkaTkaYuaTfaTfaTfaTfaTfaTfaYvaYwaUgaYxaYvaTfaTfaTfaTfaTfaTfaYyaYzaYAaTfaUqaYBaUraTfaTfaUqaYBaUraTfaYCaYDaYEaTfaUqaYBaUraTfaTfaUqaYBaUraToaRjaYGaYHaUwaYIaToaClaYJaYKaYLaClaYJaYKaYLaClaClaClaYMaUAaClaClaClaClaClaClaUAaYNaUAaClaClaDtaDtaDtaDtaDtdEfdEadEjdEgdEmdEkdEkdEndEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaRfaRfaRfaRfaRfaRfaRfaahaahaRfaYOaYOaYOaRfaahaahaahaahaYPaYQaYRaYRaYRaYRaYRaYSaYPahyaTfaTfaYTaYUaYVaTfaTfaTfaYWaYXaYYaTfaTfaahaahaahaahaahaYZaZaaZbaZcaYZaahaahaahaahaahaTfaZdaZeaZdaTfahyahyahyahyahyahyahyahyaZfaZgaZhaZiaZfahyahyahyahyahyahyahyahyaToaToaZjaZkaZlaToaToahyahyahyahyahyahyahyahyahyahyaClaYMaUAaClaahaahaahaahaZmaZmaZnaZmaZmaahaahaahdEodEqdEpdEvdEtdExdEwdEtdEydEydEzdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpaZqaZraZoaahaahaahaahaYPaZsaZtaZuaZvaZwaZxaYRaYPahyahyaZyaZzaZAaZBaZyahyaTfaUiaThaTiaTfaahaahaZCaZCaZCaZCaZDaZDaZEaZDaZDaZFaZFaZFaZFaahaZdaZGaZHaZdahyahyahyahyaZIaZJaZKaZLaZIaZIaZMaZNaZOaZIaZIaZJaZKaZLaZIahyahyahyahyaZPaYGaYHaUwbaAaZRaZRaZSaZTaZUaZRaZSaZTaZUaZRaZRaZRaZVaZRaZRaahaahaahaahaahaZmaZWaZXaZmaahaahaahdEodEBdEAdEDdECdEFdEEdEHdEGdFfdEIdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbKMbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahaahdEodFhdFgdFjdFidFkdEvdEtdEtdFpdFldEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfbbgaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCdCqbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahaahdEodFYdFXdGldFZdGpdEkdEkdEkdEkdGxdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahdEodGzdGydGAdEtdGBdEtdEtdEtdEtdGCdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmdGDaZmaZmaZmaZmdEtdGEdFldEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdOaZWbdObezbeAaZmaZmdGFdGFdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfaaFLbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfodGGbfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbfqbfrbfsbdPbftbfubfvbdTaahaahaahaahaahaYPaYPbfwbfxbfyaYPaYPahyahyahybfzbfAbcnbfBbeebfCbfDbfEbfFbefbefaahaahaahaahbdlbfGbeTbfHbfIbfJbeTbfKbdlaahaahaahaahaZdaZHaZdahyaZIbfLdCybbJbbGbeVbfNbfObbGdCzdCzdCzbbGbjlbfPbfQbbGbbGdCAbfSaZIahybbNaYGbetaUwaToaahaahbeZbfTbfUbfVbfWbfXbfYbfZbfZbgabgbbgcbgdbgebgfbggbghbcRbdMbgibfobfobfobfobgjbgkbgkbgkbgkbgkbgkbgkbglbfobfobfobfobfobfpaZmaZmaahaahaahaahaahaahbgmbgmbgmbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbgnbfrbgobdPbgpbgqbgrbdTaahaahaahaahahyahyahyahyahyahyahyahyahyahybbobbobgsbcnbgtbeebefbgubgvbgwbgxbefaahaahaahaahbdlbgybeTbeibgzbeibeTbgAbdlaahaahaahaZdaZdaZHaZdahyaZIbgBdCBbfRbbGbgCbbGbbGdCCbgDbgEbgFdCDbbGbbGbgCbbGbgGbgHdCEaZIaZfaTobgIbgJbgKaToaToaahbeZbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgVbgWbgXbgYbgYbgYbgYbgYbgYbgZbgZbgZbgZbgZbgkbhabhbbmzbhdbhebgkbhfbhfbhfbhfbhfbhfbglbfpaZmaahaahaahaahaahbgmbgmbhgbhhbhibhhbhjbgmbgmaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbhkbhlbhkbdPbhmbfubhnbhobhobhobhoaahaahaahahyahyahyahyahyahyahyahyaZybhpbajbhqbhrbhsbefbhtbgvbgwbhubefaahaahaahaahbdlbhvbeTbhwbhxbhwbeTbhybdlaahaahaahaZdaZGaZHaZdahybdqbaUdCFbbGbbGbbGbbGdCGbgDbhAbhAbhAbgFdCFbbGbbGbbGbhBbbGbhCbhDbhEbhFbhGbetaUwbhHaToaahbeZbhIbhJbgNbhKbhLbhLbhLbhLbhMbhNbgVbhObhPbgYbhQbhRbhSbhTbgYbhUbhVbhVbhWbgZbhXbhYbhYbhZbhZbhYbiabhfbibbicbidbiebhfbdOaZWaZmaahaahaahaahaahbgmbifbigbihbiibijbikbifbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9899,13 +9944,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbvRboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbxybyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsbztbtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahaahbxaaahaahaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmbALbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCWbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCYbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxzbGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxzbGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbyObHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbHebIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubLzbIybIzbIAbGYahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbIdbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHaGMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkbJTbMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkaPubMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAaGUbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobNBbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbPkbPlbPmbNpbNpbSzcpCcpubRlcGibGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvbQwbMPbMQbQxbQybQzbMUbMVbWWbQBbOJbQCbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbRfbRgbRhbNpbNpcGQbRgcIgbRlcNkbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgbRFbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbXibQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9914,7 +9959,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbLlbVPbVQbVRbVSbVTbLmbLkahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfbWgbWhbWibWibWjbWkbSLbWlbWmbWlbWnbUBbWlbWmbWlbUCbUDbUEahyahybKdbWobcnaZzbamahybWpbWqbULbWrbWsbWsbWtbWubUGbWvbWwbUPbWxbWybWzbWAbWBbWCbWDbWEbNCaahaZdbWFbWGbWHbWIbWJclZbWLbWKbTwbWKbWLbWKbWJbTlbTkbWNdBObVabWPbTlbTkbWQbURbPObPPaTobHCblDbHCaToaToahybMkbWRbWSbMkbWRbWSbMkbMkbMkbYAbWUbWVbCAbKNaahaahaahaahaahaahbTJbWXbWYbWZbTNbXabXbbTQbXcbXdbXebSpbXfbXgbXhcccbXjbXkbSqbXlbXmbXnbXobXpbSubSuaahaahbSxbXqbXrbSxbSxaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbSLbXObUBbUBbXPbXQbXRbXRbXRbXSbXTbUEahyahybXUbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkcqEbYmbYnbYnbTYbNCaahaZdbYpbURbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTlcgwbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzciWbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybYFbYGbYHbYIbYFahyahyahyaahaahaahaahbtHbYJbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbYKbYLbYMbYNbYObYPbXMbYQbYRbYSbYTbYUbYRbYQbXMbXMbXMbYVbSLbWlbWmbWlbYWbUBbWlbWmbWlbYXbYYbUEbYZbZabeebecbDMbZbbamahybZcbZdbZebZfbZgbZhbZibZjbUGbWvbZkbZlbZmbZnbZobZpbZqbZrbZsbZtbNCaahaZdbYpbURcaAbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbZvbTjbZwbTlbTkbTjbZybZxahybJeaUvbetaUvbJeahyahyahyahyahyahyahyahyahyahyahybZzbZAbZBbZzaahaahaahaahaahaahaahbZCbZDbZEbZFbZGbTObTPbZHbZIbZJbZKbZLaahaahaahaahaahaahbZMbZNbZObZPbZQbZMaahaahaahaahbSxbZRbZSbZTbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZdFfcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZbJTcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahycbgcbhcbicbjcbgahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEcbkcblcbmcbnbSEbNZcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAbSLcbBcbCbUBbUBbUBbUBcbDbUBcbEcbFcamcancbGcbHbecbcnaZzcbIahybUGcbJcbKcbLcbMbULcbNbUGcbOcbPcbQcbObNCcbRcbScbTcbUcbVcbWcbXbNCaahaZdbYpaZdcDsbTlbTkbYsbTmbTnbTkbTlbTkcbZbTmbTlbTkbTlccabTnccbbTlbTkdBQcaIahyahybrGccdbgJaUvbrGahyahyahyahyahyahyahyahyahyahyahyccBccfccgcaNaahaahaahaahaahaahaahbZCcchcciccjbZGcckcclbZHccmccnccobZLaahaahaahaahaahaahbZMbZNbZMbZMbZMbZMaahaahaahaahcbcccpaEGccrccscctccuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsccvccwccxbXsahyahyaahaahaahbZXbZXbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEccycczbSEbSEbSLbSLbSLbSLbSLccAbSLbSLbSLccEccCccDbSLbSLbUEbUEcdPccFccFccGbUEbUEbUEbUEbUEbYZbZabeeccHblnblmbeeahybUGbUGbUGbUGbUGbUGbUGbUGccIccJccKccLbNCbNCccMbNCbNCbNCccNccObNCccPaZdccQaZdbURbwQbTlbUZdBRbVbbVcccTccUbVbbVaccVccWbUZbVadBOccXbTkbTlcbYcaIahyahybrGaUvbetaUvbvNahyahyahyahyahyahyahyahyahyahyahyccBccYccZcaNaahaahaahaahaahaahaahbZCbZCbZCbZCbZCcdacdbbZLbZLbZLbZLbZLaahaahaahaahaahaahbZMbZNbZMaahaahaahaahaahaahaahcbccdccddcdecdfcdgcdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybYFcdiccwcdjbYFahyahyaahaahaahbZXcdkcdlcdmbZXbZXbZXbZXaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEbSEbSEaahaahaahaahbZXcdncdobZXahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZybecbcnaZzcbOcbOcbOcbOcdpcdqcdrcdscdtbFpcdvcdwcdxcdycdzcdAcdBcdCcdDcbOcbOcbOcbOcbOcdEcdFcdGbURbURbTkccUbVbbYtccVcdHbUZbYtdBObVccdIccUcdJcdKcdLcdMcdNcdOcdSahyahybrGcdQbetcdRaTocaNahyahyahyahyahyahyahyahyahyahycelcdTcdUcaNaahaahaahaahaahaahaahaahaahaahaahbZMcdVcdWbZMaahaahaahaahaahaahaahaahaahaahbZMbZNbZMaahaahcbccbccbccbccbccbccdXcdXcbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9929,32 +9974,32 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahaahaahaahcmjcmjcmjcmjcllcmkcmlcmmcmncmocllaahaahbZXbZXcjubZXdEldEldEldElahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahaahaahaahcmjcnicnjcnkcllcnlcnlcnmcnlcnncllaahaahbZXcnocjubZXbWTckJccqdEldElahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahaahaahaahcmjcogcohcoicllcojcokcolcnlcomcllaahaahbZXconcjubZXclxcrlcmycrqdElahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjcvVcrrcvWdElahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcDncDncDncEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcFucFrcqdcpjdElcxWcyjdElcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcFecEVcEVcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcJacJacEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcJacJacNfcEVcEVcEVcEVcEVcrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcPocJacPvcJacQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcuwcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacuIcuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZaGWcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjcvVcrrcvWdElahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcEVcEVcEVcEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcFucFrcqdcpjdElcxWcyjdElcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcuIcuwcxUcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcEVcEVcEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcEVcEVcDncEVcEVcEVcEVcFecrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcJacEVcLvcEVcQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcNfcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacOScuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWRcEVcEVcEVcEVcEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcPicEVcEVcEvcPocEVcEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcPvcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScPBcwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZcEVcTdcQncUncEVcEVddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMaGXcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcQzcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacymcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcCDcCEcCFcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcQzcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcCDcCEcCFcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQeddrcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcFVcCEcCFcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcGOcGPcOJcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBSdBTcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTcHBcHycHCcHDcHEcKXcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgcHLcHIcHMcLhcHOcHPcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcCDcIfcOScBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpcMocHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrcMscHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcCDcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcWQcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcWQcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacymcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcWQcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcBQcCEcCDcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcWQcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcBQcCEcCDcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQecZMcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcCFcCEcCDcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcFgcGPcFFcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBScFVcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTcHBcHycHCcHDcHEcKXcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgcHLcHIcHMcLhcHOcHPcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcBQcIfcGOcBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpcMocHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrcMscHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcBQcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIcKmcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcQAcQBcQCcrQcQDcQEdDydDxcsYcsYcQGdDzcQGdDAcQGaahaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLudEXcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMidEYcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdEZdCedCddCgdFadCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHdFbcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcQncLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjdaOcLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcyzdDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhaGYcPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQccxUdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQcdcEdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTadDQcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRdCScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCdCTcSccBgahyahyahyahyahyaahaahaahaahaahahydDRdbMdDScWuaahaahaahaahaahaahaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStcSkcSucSucSvcSwcSxcSycSycSzcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccTdcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcTZcSBcTPcTQcTRcTScTTcTUcTVcTWcPMcPMcTXcSIcTYcKjcUvcUacUvcMTcUbcUccUdcUecUecUfcPXcPFcUgcUhcUicUjcRIcUkcUycUmcUncUocUkcUkcUkcLGahyahycwhcUpcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahahyczidCVcRScKCcUrcLPcORcLPcLPcLPcUHcONcOOcOPcOQcONcUHcLPcLPcOLcLPcLPcUtcKCcSbdCWcBgahyahyahyahyahyahyahyahyahyahyahycWudDWdDVcWuaahaahaahaahaahaahaahaahcPdcUIcUwcUwcUwcUxcPdcPdaahaahcPncPncUYcUzcUzcUAcPncUBcUCcUDcPncPncPncPncPncPncPnaahaahcPxcPxcPxcPxcPxcPxcPxcPxaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccOtcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcTZcSBcTPcTQcTRcTScTTcTUcTVcTWcPMcPMcTXcSIcTYcKjcUvcUacUvcMTcUbcUccUdcUecUecUfcPXcPFcUgcUhcUicUjcRIcUkcUycUmcUodcLcUkcUkcUkcLGahyahycwhcUpcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahahyczidCVcRScKCcUrcLPcORcLPcLPcLPcUHcONcOOcOPcOQcONcUHcLPcLPcOLcLPcLPcUtcKCcSbdCWcBgahyahyahyahyahyahyahyahyahyahyahycWudDWdDVcWuaahaahaahaahaahaahaahaahcPdcUIcUwcUwcUwcUxcPdcPdaahaahcPncPncUYcUzcUzcUAcPncUBcUCcUDcPncPncPncPncPncPncPnaahaahcPxcPxcPxcPxcPxcPxcPxcPxaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccUEcUEcUFcUGcVucVgcUJcUKcULcUMcPMcUMcUNcUOcUPcUQcURcUScUTcUUcUVcRqcUWcUXcVQcUZcOocOocOocOocOocVacRucVbcUhcVccNecVdcVecVfcWicVhcVicVjcVkcVlcVmahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahahyahyahyahyahyahyczicVncEDcKCcLPcLPcVocNEcNEcNEcNDcNCcVpcVqcVrcNycNxcNwcNwcVscLPcLPcLPcKCcGxcVtcBgahyahyahyahyahyahyahyahyahyahyahydDRdbMdbScWuaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyaahaahaahaahahyahyahyahyahycWvcVvcVwcVxcPnaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccVycVzcVAcNZahycTZcVBcVCcVDcVEcVFcUMcVGcVHcVIcVJcVKcVKcVLcVMcVNcPMcVOcVPcWBcVRcVScVScVTcOocVUcVVcMTcVWcVXcVYcNecVZcWacWbcWicWccWdcWecWfcWgcVmcwhcwhcwhcRQcwhcWhcWhcWOcWjcWkcWhcWhcWOcWjcWkcWhcWhahyahyahyahyahyahyahyahyahyahyahyahycziczicWlczicKCcWmcWncWocWpcvtcLPcLRcONcOOcOOcOQcONcLRcLPcvtcWpcWqcWrcWscKCcBgcWtcBgcBgahyahyahyahyahyahyahyahyahyahydDTdbMdbScWuaahcWucWucWucWucWuaahaahahyahyahyahyahyaahaahaahaahaahaahaahahyahyahyahycXncWwcWxcWycWuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccUEcUEcWzcWAcVucXucWCcWDcWEcWFcWGcWHcWIcWJcWJcWJcWFcWFcWFcWKcWLcPMcWMcWNcMTcMTcXycWPcwAcvvcXycWPcWScWTcWUcVYcNecWVcWWcWXcWicWYcWZcXacXbcXccVmdDXcXecXecXfczQcWhcXgcXhcXicXjcXkcXlcXhcXmcXhcXhcWhcWhcXHcXocXocXocXocXocXpcXqcXHcXpcXqcXqcXrcXscXtcKCcKCcNYcKEcKFcKCcKCcKCcYfcXvcXvcKIcYfcKCcKCcKCcNYcKEcKFcKCcKCcXtcXwdCXcXqcXqcZncXzcXzcXzcXAcWucWucWudDYcWucWwdDZcWucWucWucXBcXCcXCcWucWucWucWucZncXzcXzcXAcWucWucWucWucWucWucWucZncXzcXzcXAcWucXDcXEcXFcWucXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9971,15 +10016,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahahyahyahyahyahydjtdizdiAdiBdiCdiBdiDdiEdiCdiBdiFdiEdiCdiCdiDdiGcMNcMNdaSdiHdiIdiJdiKdjudiMdiNdiOdgzdfFdihdgBdiidijdiPdiQdiRdijdhrdiSdiTdiUdiVdiWcwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjwddYdjcdjddjedcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdjfdjgdjhdeidjiddcaaaaaaaaadjjdjkdjkdjkdjkdjkdjjaaaaaaaaaddidjldemdjmdjndjoddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodjpdjqdjrdjsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaaaaaaaaaahydkCdjxdbDdbDdkJdjxdkLdbDdkJdjxdkLdbDdkJdkUcOsbkQbkQahydaSdgzdgzdgzdgzdgzdjydgzdgzdgzdjzdjAdjBdjCdjCdjCdjCdjCdjCdjCdjCdjCcxxdhtcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdehdeidfgdeWaaaaaaaaadjjdjDdjEdjkdjEdjDdjjaaaaaaaaadfbdfidemdendhGdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAaaadjFaaabkQcIcdjGcNZcMKcIcdjGcNZcMKcIcdjGcNZcMKcIcbkQaahdjHdjHdjIdjJdjKdjLdjMdjNdjOdjPdjQdjRdjSdjCdjTdjUdjVdjWdjXdjYdjZdjCdjCdhtcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadfUddZdgRdebdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdejdgSdehdeidgSdhMaaaaaadisdkbdkcdkcdkddkcdkcdkbdiwaaaaaadifdhGdemdendhGdepdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiyderdesdixdgXddsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaacAaaddkeaadbkQcIcdkfdkgdkhcIcdkidkjdkkcIcdkldkmdkncIcaahaahdjHdkodkpdkqdkrdksdktdkqdkudjPdkvdkwdkxdjCdkydkydkzdjXdjXdkAdkAdEbdjCdhtcwhdkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHddZdkIdlEdfSdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdkNdkOdkPdehdeidfgdhMaaaaaadjjdjkdkQdjkdjkdjkdkRdkSdjjaaaaaadifdfidemdendkTdlYdkVdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdladlbdlcdixdgXdldddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledlfdlgaaadledlfdlgaaadledlfdlgaaadledlfdlgaaaacAaadaadaaaaaacIcdlhdlidlhcIccUEdljcUEcIcdlkdlldlkcIcaahaahdjHdlmdlndkqdlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlzdlzdlBdlzdEcdjCdhtdDadoidlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadlGdlHdlIdlJdlKdlLdlMdeddeddeddeddeddeddeddeddeddeddeddeddeddlNdlOdlPdlQdlRdlSdlTdokdkNdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdkVdkXdlZdmadDbdmcdmddmedmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmgdmhdmidmjdDcdixdgXdmlddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledmmdlgaaddledmmdlgaaddledmmdlgaaddledmmdlgaadacOaaaaadaadaaacIcdlhdmndlhcIccUEdmocUEcIcdlkdmpdlkcIcaahaahdjHdlmdmqdkqdlpdlpdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmCdmDdlzdEddjCdhtczQdmFdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfmdeXddYddZdmHdmIdmJdmKdmLdeddeddeddeddeddeddeddeddeddeddeddeddeddmMdmNdmOdmPdmQdehdmRdmSdmTdgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdmWdmVdmXdendmYdmZdnadnbdncaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnddnednfdngdnhdixdgXdniddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaacAaaddkeaadbkQcIcdkfdkgdkhcIcddrdcYdfQcIcdkldkmdkncIcaahaahdjHdkodkpdkqdkrdksdktdkqdkudjPdkvdkwdkxdjCdkydkydkzdjXdjXdkAdkAdEbdjCdhtcwhdkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHddZdkIdlEdfSdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdkNdkOdkPdehdeidfgdhMaaaaaadjjdjkdkQdjkdjkdjkdkRdkSdjjaaaaaadifdfidemdendkTdlYdkVdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdladlbdlcdixdgXdldddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledlfdlgaaadledlfdlgaaadledlfdlgaaadledlfdlgaaaacAaadaadaaaaaacIcdlhdlidlhcIcdkjdkidkjcIcdlkdlldlkcIcaahaahdjHdlmdlndkqdlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlzdlzdlBdlzdEcdjCdhtdDadoidlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadlGdlHdlIdlJdlKdlLdlMdeddeddeddeddeddeddeddeddeddeddeddeddeddlNdlOdlPdlQdlRdlSdlTdokdkNdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdkVdkXdlZdmadDbdmcdmddmedmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmgdmhdmidmjdDcdixdgXdmlddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledmmdlgaaddledmmdlgaaddledmmdlgaaddledmmdlgaadacOaaaaadaadaaacIcdlhdmndlhcIcdkjdkkdkjcIcdlkdmpdlkcIcaahaahdjHdlmdmqdkqdlpdlpdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmCdmDdlzdEddjCdhtczQdmFdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfmdeXddYddZdmHdmIdmJdmKdmLdeddeddeddeddeddeddeddeddeddeddeddeddeddmMdmNdmOdmPdmQdehdmRdmSdmTdgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdmWdmVdmXdendmYdmZdnadnbdncaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnddnednfdngdnhdixdgXdniddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaadaadcIccIccIccIccIccIccIccIccIccIccIccIccIcaahaahdjHdkodkpdkqdlodlpdktdkqdEedjPdfFdihdnkdjCdnldnmdnndnodnpdnqdnrdnsdjCdntczQdnudppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdnvddYddZdnwdlEdhvdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdnxdkOdnydehdnzdokdnxdkMdkOdjjdjkdjkdjkdjkdjkdjkdjkdjjdlYdkWdnAdkXdnBdendnCdlYdnAdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdnDdlbdnEdixdgXdnFddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaaaaadaadaadaadaaaaaaaadaadaadaaabkQdnGdnGdnGdnGdnGdjHdjHdnHdnIdnJdnKdnLdnMdjHdjHdnNdnOdnPdjCdjCdnQdnodnRdnSdnTdnrdjCdjCdhtczQdnudppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadeqdeXdnVdnWdgRdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdgSdnYdnZdnXdhMaaaaaadoadjkdmUdmUdobdmUdmUdjkdoaaaaaaadifdocdoddoedhGdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdesdogdohddsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaaaaaaaaddqrdojdojdojdojdnGdqLdoldnGdnGdomdomdondoodopdjHdjHdjHdjHdjHdjHdjHdjHdoqdordosdotdoudjCdjCdjCdjCdjCdjCdjCdjCdjCdhtczQdovdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdgwdfRdfSdkadfUddZdgRdhydfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdhAdgSdehdeidowdhMaaaaaadoxdjkdjkdjkdoydjkdjkdjkdoxaaaaaadifdozdemdendhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdixdoAddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaddoCaadaaaaaddoCaadaaaaaddoCaadaaaaaddoCaadaaadoDaaaaaaaaadqNdoFdoGdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoQdoRdoSdoTdoUdoVdoWdoRdoOdoXdoYdoZdpadpbdpcdpddpedpfdpgdphdpidpjdpkdpldpmdpndhtdpodqTdpqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdprdpsdptdpudpvdpwdpxdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdpydpzdeidnXdhMaaaaaadpAdjkdmUdmUdjkdmUdmUdjkdpAaaaaaadifdocdemdpBdpCdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdpDdpEdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddpFdpGdpHdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpJdpGdpGdpGdpKdpLdpMdpNdpOcBhcAMdpRdpSdpTdpUdpVdpWdpXdpYdpZdqadqbdqcdqddqedoudoudqfdoudqgdoudqhdqidoudoudqjdoudqfdqkdqldqmdqndqodqpdqqcwhdqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdhIdfRdhvdkadqsdcZdqtdlEdfSdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdkNdkOdquddfdqvdokdkNdkMdkOdjjdqwdjkdjkdjkdjkdjkdqxdjjdlYdkWdkVdkXdqyddldqzdlYdkVdkWdkXaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaadmGdkZdladlbdqBdqCdqDddsaahaahaahdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaddqFaadaaaaaddqFaadaaaaaddqFaadaaaaaddqFaadaaaaadaaaaaaaaadqNdoFdqGdqHcBPcBldojdnGdqJdqKdnGdnGdrxdoldqMdnGdrAdqOdqOdqPdqOdqQdqRdqQdqSdrBdqUdqVdrBdqUdqSdqWdqXdsLdnGdqZdqZdnGdnGcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadfmdeXddYddZdmHdradrbdrcdrddeddeddeddeddeddeddeddeddeddeddeddeddeddredrfdrgdrhdmQdehdmRdmSdridgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdrjdmVdmXdendmYdrkdrldrmdrnaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadrodrpdrqdrrdnhdixdgXddsdqEdqEdqEdqEdrsdrtdrudrvdrsdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaadoDaaaaaaaaadqNdoFdoGdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoQdoRdoSdoTdoUdoVdoWdoRdoOdoXdoYdoZdpadpbdpcdpddpedpfdpgdphdpidpjdpkdpldpmdpndhtdpodqTdpqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdprdpsdptdpudpvdpwdpxdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdpydpzdeidnXdhMaaaaaadpAdjkdmUdmUdjkdmUdmUdjkdpAaaaaaadifdocdemdpBdpCdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdpDdpEdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddpFdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGdpGdpGdpKdpLdpMdpNdpOcBhcAMdpRdpSdpTdpUdpVdpWdpXdpYdpZdqadqbdqcdqddqedoudoudqfdoudqgdoudqhdqidoudoudqjdoudqfdqkdqldqmdqndqodqpdqqcwhdqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdhIdfRdhvdkadqsdcZdqtdlEdfSdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdkNdkOdquddfdqvdokdkNdkMdkOdjjdqwdjkdjkdjkdjkdjkdqxdjjdlYdkWdkVdkXdqyddldqzdlYdkVdkWdkXaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaadmGdkZdladlbdqBdqCdqDddsaahaahaahdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadaaaaaaaaadqNdoFdqGdqHcBPcBldojdnGdqJdqKdnGdnGdrxdoldqMdnGdrAdqOdqOdqPdqOdqQdqRdqQdqSdrBdqUdqVdrBdqUdqSdqWdqXdsLdnGdqZdqZdnGdnGcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadfmdeXddYddZdmHdradrbdrcdrddeddeddeddeddeddeddeddeddeddeddeddeddeddredrfdrgdrhdmQdehdmRdmSdridgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdrjdmVdmXdendmYdrkdrldrmdrnaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadrodrpdrqdrrdnhdixdgXddsdqEdqEdqEdqEdrsdrtdrudrvdrsdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaddledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaaaaaddtkdojdojdojdojdnGdrydrzdtIaaadtXdrCdrDdrEdrFdqOdrGdrHdrIdqQdrJdrKdrLdrMdrNdrOdrPdrQdrLdrRdrSdrTdnGdrUdrVdrWdtIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjbdrXdlHdrYdrZdsadsbdscdeddeddeddeddeddeddeddeddeddeddeddeddeddsddsedsfdsgdshdlSdsidokdnxdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdnAdkXdsjdmadDddsldsmdsndsoaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadspdsqdsrdssdDedsudsvdswdBLdsydsydsydszdsAdszdsBdszdsydsxdsydsydsydsCdsDdsEdsFdsGdsHdqEdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaadaadaaaaaaaaaaaaaaadnGdsJdsKdtZaaddtXdsMdsNdsOdsPdqOdsQdsRdsSdqQdsTdsUdrLdsVdsWdsXdsYdsZdrLdtadtbdtcdnGdtddtedtfdtZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdtgdlEdhvdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdnxdkOdthdehdeidfgdhMaaaaaadjjdtidtjdjkdjkdjkdtjdwfdjjaaaaaadifdfidemdendtldlYdnAdkWdkXaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadmGdkZdtmdtndtodtpdtqdtqdBMdtsdttdtudtvdtwdtxdtydtzdtwdtAdtBdtCdtDdtEdtBdtBdtBdtBdtFdtGdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaacAaaaaaaaadaadaaaaaaaaaaaaaaaaaadnGdtHdtHdnGahydxKdoldtJdqLdoldqOdtKdtLdtMdtNdtOdtPdtQdtRdtSdtTdtUdtVdtWdxNdtYdxOduadubducdnGdnGaaddudduedueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadufddZdgRdugdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMduhdgSdehdeiduidhMaaaaaadujdukduldumdumdumduldukdunaaaaaadifduodemdendhGdupdifaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaadiyduqdixdurddsdqEdqEdusdutduudqEdusdutduvdqEdusdqEdqEdqEdqEdqEdqEdqEdtBdtFdtBdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9993,24 +10038,24 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIds aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzvdnGdzNbkQdzNdnGduadzwdxzdzxdzydzzdwUdzAdzBdzCdzDdzEdzFdzGdzHdzIdzJdzKdzLdzMdBwdzhdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBxdfTdzPdzQdfmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfBdzRdzSdokdzTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBydkXdzVdzWdfIaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdmGdkZdzXdkZdkZdzYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaadzZaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahydBzahyahyduadAbdyTdAcdAddAedwUdAfduadAgdAhdAiduadAjdAkdAldAmdAndAodApduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaadaadaaaaaaaaaaaadAraaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaahyduadAsdwUdAtdAudAudwUdAvdAwdAxdAydAzdAwdAAdABdzbdzcdACdADdAEduadwWdwmdwXdwYdwmdwZdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaadAraaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduadwUdwUdzydAFdAFdwUdAvdAGdAHdAIdAJdAGdAAdAvdzIdAKdzKdALdAMduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedudaadaadaadaaddANaadaadaadaadaadacOduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduaduadwUdAOdAddAddAPdAvdAQdARdASdATdAQdAUdAVdAWdAXdAYdAZduaduadytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaaaaaaaaadBaaaaaadaadaaaaaaaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaaaaaduaduadBbdBcdBbdBbduaduaduadBdduaduaduaduaduadBeduaduaduaaaddwYdwmdwZdwWdwmdwXdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaaaaadBgdBgdBgdBgaadaaddBhaaadBhaadaaaaadaaaaaaaadaaaaaaaaddytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaadBodBpdBpdBoaaadudaaaaaaaaaaaddwkdwXdwkdwndwYdwndwkdwXdwkdwndBodBodwkdwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaadBqdBqdBqdBqdBqaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdBrdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaadaaddBodBodBodBoaaddueaaaaaaaaaduddBpdBodBpdBpdBodBpdBpdBodBpdBpdBodBodBpdBpaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaadaadaaadBaaaaaadaaaaadaaaaadaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaadueaaaaaadBodBpdBpdBoaaadueaaaaaaaaaduedBodwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdBoaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaadaaddBodBodBodBoaaddueaaaaaaaaaduedBodwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdBodudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaadwWdyudytdwZaaadueaaaaaaaaaduedBpdBodBpdBpdBodBpdBpdBodBpdBpdBpdBpdBpdBpdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaddBqdBqdBqdBqdBqaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaadaaaaaaaadaaadueaaaaaaaaaduedytdwZdytdyudwWdyudytdwZdytdyudytdyudytdyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadBaaaaaadaaaaadaadaadaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedueduedueaaddueaaaaaaaaadudduedueduedueaadduedueduedueduedueduddueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaddBqdBqdBqdBqdBqaaadueaaadBsaaaaaadBsaaaaaaaaadBsaaaaaaaaaaaaaaadBsaaaaaaaaadBsaaaaaadBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadBaaaaaadaaaaadaadaadaaddueaaadBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaadBqdBqdBqdBqdBqaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadueaaaaaaaadaadaadaaaaaadBtaadaaaaaaaadaadaaaaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduadwUdwUdzydAFdAFdwUdAvdAGdAHdAIdAJdAGdAAdAvdzIdAKdzKdALdAMduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedudaadaadaadaaddAraadaadaadaadaadacOduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduaduadwUdAOdAddAddAPdAvdAQdARdASdATdAQdAUdAVdAWdAXdAYdAZduaduadytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaaaaaaaaadAraaaaadaadaaaaaaaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaaaaaduaduadBbdBcdBbdBbduaduaduadBdduaduaduaduaduadBeduaduaduaaaddwYdwmdwZdwWdwmdwXdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaaaaadBgdBgdBgdBgaadaaddBhaaadBhaadaaaaadaaaaaaaadaaaaaaaaddytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaadBodBpdBpdBoaaadudaaaaaaaaaaaddwkdwXdwkdwndwYdwndwkdwXdwkdwndBodBodwkdwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaadBqdBqdBqdBqdBqaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdBrdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaadaaddBodBodBodBoaaddueaaaaaaaaaduddBpdBodBpdBpdBodBpdBpdBodBpdBpdBodBodBpdBpaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaadaadaaadAraaaaadaaaaadaaaaadaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaadueaaaaaadBodBpdBpdBoaaadueaaaaaaaaaduedBodwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdBoaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaadaaddBodBodBodBoaaddueaaaaaaaaaduedBodwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdBodudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaadwWdyudytdwZaaadueaaaaaaaaaduedBpdBodBpdBpdBodBpdBpdBodBpdBpdBpdBpdBpdBpdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaddBqdBqdBqdBqdBqaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaadaaaaaaaadaaadueaaaaaaaaaduedytdwZdytdyudwWdyudytdwZdytdyudytdyudytdyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadAraaaaadaaaaadaadaadaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedueduedueaaddueaaaaaaaaadudduedueduedueaadduedueduedueduedueduddueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaddBqdBqdBqdBqdBqaaadueaaadBsaaaaaadBsaaaaaaaaadBsaaaaaaaaaaaaaaadBsaaaaaaaaadBsaaaaaadBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadAraaaaadaaaaadaadaadaaddueaaadBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaadBqdBqdBqdBqdBqaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadueaaaaaaaadaadaadaaaaaadAraadaaaaaaaadaadaaaaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueduedueduedueaaaaaaaaadAraaaaaaaaadueduedueduddueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBuaaddueaaaaaaaaaaaaaaaaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBvdBvdBvdBvdBvdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaadueaaaaaaaaaaaaaaaaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm index d37aa731f2..7f7311bfc1 100644 --- a/maps/polaris-2.dmm +++ b/maps/polaris-2.dmm @@ -681,7 +681,7 @@ "ne" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nf" = (/obj/machinery/deployable/barrier,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ng" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"nh" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"nh" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ni" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "nj" = (/turf/unsimulated/wall{icon = 'icons/misc/title.dmi'; icon_state = "title"},/area) "nk" = (/turf/unsimulated/wall,/area/centcom/specops) @@ -731,7 +731,7 @@ "oc" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "od" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "oe" = (/obj/item/weapon/bikehorn/rubberducky,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) -"of" = (/turf/simulated/shuttle/wall{dir = 6; icon_state = "wall3_wall"; tag = "icon-swall (NORTHWEST)"},/area/space) +"of" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "og" = (/obj/structure/table/standard,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oh" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oi" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -760,7 +760,7 @@ "oF" = (/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oG" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT2"; name = "Launch Bay #2"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "oH" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT2"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) -"oI" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"oI" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oJ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "oK" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "oL" = (/obj/mecha/working/ripley/firefighter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -786,7 +786,7 @@ "pf" = (/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "pg" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "ph" = (/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) -"pi" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pi" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pj" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pk" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pl" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -805,8 +805,8 @@ "py" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pz" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pA" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pD" = (/turf/simulated/shuttle/wall{icon_state = "wall3_wall15"},/area/centcom/specops) "pE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership) "pF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership) @@ -817,9 +817,9 @@ "pK" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pL" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pM" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pN" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pO" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pP" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pN" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pP" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pR" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "pS" = (/obj/structure/reagent_dispensers/beerkeg,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) @@ -843,7 +843,7 @@ "qk" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "ql" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "qm" = (/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) -"qn" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) +"qn" = (/turf/simulated/mineral,/area/syndicate_mothership) "qo" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) "qp" = (/obj/machinery/camera/network/ert{c_tag = "Assault Armor South"; dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "qq" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -891,7 +891,7 @@ "rg" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rh" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "ri" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"rj" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"rj" = (/turf/unsimulated/floor{icon_state = "dark"},/area/space) "rk" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "rl" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "rm" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -917,7 +917,7 @@ "rG" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "rH" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "rI" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"rJ" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"rJ" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/space) "rK" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "rL" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/shuttle/specops/centcom) "rM" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) @@ -929,7 +929,7 @@ "rS" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "rT" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rU" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"rV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"rV" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/space) "rW" = (/obj/machinery/computer/communications,/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1443; listening = 1; name = "Spec Ops Intercom"; pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "rX" = (/obj/machinery/computer/prisoner{name = "Implant Management"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "rY" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) @@ -947,7 +947,7 @@ "sk" = (/obj/machinery/shower{pixel_y = 32},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "sl" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "sm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"sn" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3_straight"; tag = "icon-swall_straight (EAST)"},/area/space) +"sn" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "so" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "sp" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "sq" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -967,7 +967,7 @@ "sE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "sF" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "sG" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command) -"sH" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall3_wall"; tag = "icon-swall (EAST)"},/area/space) +"sH" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "sI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "sJ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "sK" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -998,7 +998,7 @@ "tj" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) "tk" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tl" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tm" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "tn" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "to" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom) "tp" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1014,7 +1014,7 @@ "tz" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1331; id_tag = "merc_base"; pixel_x = -25; pixel_y = -5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) "tA" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tB" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tC" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tC" = (/obj/structure/table/rack,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "tD" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "tE" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom) "tF" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1032,7 +1032,7 @@ "tR" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tS" = (/obj/machinery/door/airlock/vault{name = "Armory"; req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tT" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tU" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tU" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "tV" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "tW" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "tX" = (/obj/item/weapon/flame/lighter/zippo,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1045,13 +1045,13 @@ "ue" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) "uf" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) "ug" = (/obj/machinery/door/window{dir = 2; name = "Seating"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"uh" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"uh" = (/obj/structure/table/rack,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ui" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "uj" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "uk" = (/obj/structure/table/rack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ul" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "um" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"un" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"un" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uo" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/shuttle/administration/centcom) "up" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom) "uq" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1072,7 +1072,7 @@ "uF" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uG" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uH" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"uI" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"uI" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uJ" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (WEST)"; icon_state = "propulsion_r"; dir = 8},/turf/space,/area/shuttle/administration/centcom) "uK" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom) "uL" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1113,7 +1113,7 @@ "vu" = (/turf/simulated/shuttle/floor,/area/supply/dock) "vv" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "vw" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"vx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"vx" = (/obj/structure/table/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "vy" = (/obj/structure/table/standard,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "vz" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "vA" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1138,8 +1138,8 @@ "vT" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "vU" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "vV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) -"vW" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"vX" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"vW" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/space) +"vX" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "vY" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/terminal) "vZ" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/terminal) "wa" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) @@ -1176,7 +1176,7 @@ "wF" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "wG" = (/obj/machinery/chemical_dispenser/ert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "wH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "supply_shuttle"; pixel_x = 25; pixel_y = 0; req_one_access = list(13,31); tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock) -"wI" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"wI" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "wJ" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "wK" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "wL" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1190,14 +1190,14 @@ "wT" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "wU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "wV" = (/obj/machinery/door/window{dir = 1; name = "Surgery"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"wW" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"wX" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"wY" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"wW" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/space) +"wX" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"wY" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "wZ" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"xa" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"xa" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xb" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xc" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) -"xd" = (/obj/machinery/door/airlock/centcom{name = "Creed's Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"xd" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xe" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xf" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xg" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/security) @@ -1212,7 +1212,7 @@ "xp" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock) "xq" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock) "xr" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"xs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"xs" = (/obj/machinery/door/window{tag = "icon-right"; name = "Seating"; icon_state = "right"; dir = 2; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xt" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xu" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xv" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1231,7 +1231,7 @@ "xI" = (/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xJ" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "xK" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"xL" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"xL" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xM" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_station/start) "xN" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xO" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1307,7 +1307,7 @@ "zg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zh" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zi" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zj" = (/obj/machinery/computer/card/centcom,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "zk" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zl" = (/obj/structure/table/steel,/obj/item/weapon/folder/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zm" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) @@ -1474,9 +1474,9 @@ "Cr" = (/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (NORTH)"; icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Cs" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram) "Ct" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"Cu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) -"Cv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) -"Cw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) +"Cu" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) +"Cv" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) +"Cw" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "Cx" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "Cy" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "Cz" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 4},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1496,8 +1496,8 @@ "CN" = (/obj/structure/flora/ausbushes/fernybush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CO" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CP" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) -"CQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"CR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"CQ" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"CR" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "CS" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CT" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CU" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1514,11 +1514,11 @@ "Df" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "Dg" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram) "Dh" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access = list(101)},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"Di" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"Di" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"Dj" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"Dk" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"Dl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"Dm" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) "Dn" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "Do" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "Dp" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1585,8 +1585,8 @@ "Ey" = (/turf/unsimulated/wall,/area/centcom/medical) "Ez" = (/obj/machinery/door/airlock/glass_medical{name = "Arrivals Medbay"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "EA" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/medical) -"EB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"EC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"EB" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) +"EC" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "ED" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EE" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EF" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1599,10 +1599,10 @@ "EM" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "EN" = (/obj/mecha/combat/gygax/dark,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "EO" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/sunglasses/prescription,/obj/item/clothing/glasses/sunglasses/prescription,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) -"EP" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"EQ" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"EP" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"EQ" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "ER" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/obj/effect/floor_decal/corner/green{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"ES" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"ES" = (/obj/effect/floor_decal/corner/green{dir = 5},/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "ET" = (/obj/structure/flora/ausbushes,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EU" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EV" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1612,9 +1612,9 @@ "EZ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Fa" = (/obj/effect/floor_decal/corner/green{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Fb" = (/turf/unsimulated/wall,/area/centcom/bar) -"Fc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) -"Fd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) -"Fe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) +"Fc" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Fd" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Fe" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "Ff" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "Fg" = (/obj/effect/floor_decal/spline/plain,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) "Fh" = (/turf/unsimulated/wall,/area/centcom/bathroom) @@ -1633,6 +1633,7 @@ "Fu" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) "Fv" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) "Fw" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) +"Fx" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "Fy" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHWEST)"; icon_state = "swall"; dir = 9},/area/shuttle/escape/centcom) "Fz" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "FA" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) @@ -1661,9 +1662,9 @@ "FX" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "FY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "FZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) -"Ga" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"Ga" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "Gb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) -"Gc" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"Gc" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "Gd" = (/turf/simulated/shuttle/wall{tag = "icon-swall_straight"; icon_state = "swall_straight"},/area/shuttle/escape/centcom) "Ge" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "Gf" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) @@ -1757,7 +1758,7 @@ "HP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "shuttle_dock_north_mech"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "HQ" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "HR" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"HS" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) +"HS" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "HT" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "HU" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "HV" = (/obj/structure/curtain/open/shower,/obj/machinery/shower,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) @@ -1901,11 +1902,14 @@ "KD" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KE" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KF" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KG" = (/obj/structure/table/rack,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "KH" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2) "KI" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "KJ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KK" = (/obj/structure/bed/roller,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = -32},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KL" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KM" = (/obj/structure/table/rack,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"KN" = (/obj/structure/table/rack,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "KO" = (/obj/effect/floor_decal/corner/blue{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KP" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KQ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -1915,6 +1919,7 @@ "KU" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KV" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KW" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KX" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/space) "KY" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KZ" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "La" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -1970,7 +1975,7 @@ "LY" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/centcom/evac) "LZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/centcom/evac) "Ma" = (/obj/structure/table/standard,/obj,/obj,/obj,/obj,/obj,/obj,/obj,/turf/unsimulated/beach/sand,/area/beach) -"Mb" = (/obj/structure/table/standard,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach) +"Mb" = (/obj/structure/table/standard,/obj/item/clothing/under/color/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach) "Mc" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s (EAST)"; icon_state = "swall_s"; dir = 4},/area/centcom/evac) "Md" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/centcom/evac) "Me" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/centcom/evac) @@ -2019,7 +2024,7 @@ "MV" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "MW" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "MX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) -"MY" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) +"MY" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "MZ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "Na" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/obj/item/toy/plushie/mouse{desc = "A plushie of a small fuzzy rodent."; name = "Woodrat"},/turf/unsimulated/beach/sand,/area/beach) "Nb" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach) @@ -2220,9 +2225,9 @@ "QO" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "QP" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start) "QQ" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"QR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"QS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"QT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"QR" = (/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"QS" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/space) +"QT" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "QU" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "QV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "QW" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2232,7 +2237,7 @@ "Ra" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Rb" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Rc" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"Rd" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Rd" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "Re" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "Rf" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Rg" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2296,6 +2301,7 @@ "Sm" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) "Sn" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/bag/cash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "So" = (/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) +"Sp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/retractor,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "Sq" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) "Sr" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) "Ss" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) @@ -2326,6 +2332,7 @@ "SR" = (/obj/item/target,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "SS" = (/obj/item/target/syndicate,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "ST" = (/obj/item/target/alien,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"SU" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "SV" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "SW" = (/obj/structure/kitchenspike,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "SX" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/milosoup,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) @@ -2365,8 +2372,9 @@ "TF" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "TG" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "TH" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "\[center]\[b]LIST OF SPELLS AVAILABLE\[/b]\[/center]\[br]\[br]Magic Missile:\[br]This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.\[br]\[br]Fireball:\[br]This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.\[br]\[br]Disintegrate:\[br]This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.\[br]\[br]Disable Technology:\[br]This spell disables all weapons, cameras and most other technology in range.\[br]\[br]Smoke:\[br]This spell spawns a cloud of choking smoke at your location and does not require wizard garb.\[br]\[br]Blind:\[br]This spell temporarly blinds a single person and does not require wizard garb.\[br]Forcewall:\[br]This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.\[br]\[br]Blink:\[br]This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.\[br]\[br]Teleport:\[br]This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.\[br]\[br]Mutate:\[br]This spell causes you to turn into a hulk, and gain telekinesis for a short while.\[br]\[br]Ethereal Jaunt:\[br]This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.\[br]\[br]Knock:\[br]This spell opens nearby doors and does not require wizard garb.\[br]"; name = "List of Available Spells (READ)"},/obj/item/clothing/glasses/regular,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) -"TI" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"TJ" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"TI" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"TJ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"TK" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "TL" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "TM" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "TN" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -2399,7 +2407,6 @@ "Uo" = (/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = 28},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Up" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Uq" = (/obj/machinery/disease2/isolator,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ur" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Us" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ut" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Uu" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -2517,49 +2524,49 @@ mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmmmmmmmmmmmmqmmmmmmmrmpmpmpmoaPaPaPaPmompmpmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPmjmjmjmjmjmjmjmjmjaPmjmjmjmjmjmjmjmj mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmqmmmmmqmmmmmrmsmtmumvmwmxmymzmAmomJmKmLnJnPmVnRnKmmmmmmmqmCmDmDmWmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPozmEmFozmGmGozmHmIozmpmpmpmpmpmpmpmpmpmompmpmpmMmNmpmOmMmPmQoYmompmpmpmpmBmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPofsnsnsnsnsHmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpmpmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPoznnnnELnonnpbmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpmpmpmpmppimpmpngmompmpmpmpnhmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmnPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpnhmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPoznnnnELnonnpbmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpnhmpmpmppimpmpngmompmpmpmpFdmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj njmamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlENnnnnnnmompmpmpmpmpmpmpmpmVmpmpnpnqnrnsmpmpnfmontnunvmMmpmpmpmMnwnxnymompmpmpmppbnznAnBmoaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnCmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnnEnnnnnnnnnnnEnFnnnnnnnGozmpmpmpmpmpmpmpmpmVmpmpmpmpmpmpmpmpnHnJnPmMmMmUmpmpmpmUmMmMnRmrmpmpmpmpmBmmmmmmnKmmmqmmmmmrnLnMnNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnOaPmTmjmjjwjwjwjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnRnPnQnRnPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVnWmpmpmpnWnXnYnYoympmpmpmpoznZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwEOogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloinnnnojpbokolpbomonpboooppboqorosotouovmpmpowmMoxmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoAoAoAmYoznMnMozoBnMoCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPlwoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnImMmMmMmMmMmUTITJnRnPoImpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnImMmMmMmMmMmUFeFenRnPofmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloLnnnnnnoMmpmpmpmpmpmpmpmpmpmpmpmpmpmpoNmpmpoNoOmpmpmpoPoQoYoSoTmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPkToDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoUnnnnnnnnnnoUoVnnnnnnnnoMmpmpoWmpmpoWmpmpmpmpmpmpmpmpoXmpmpoXmpmpmpmpoPpjoYoYoTmpmpmpmpmpmpmpmpmYmYoAoAoAmYpbpcnMpbpdpbpemoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjwoFoFpfjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphpbmMmMmUnTnTmUmMmMpbmMmMmMmMmMmUTLTLnRnPmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoFoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpnJmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpOpPpQmpmpmppPpOpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqmioqnqojwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpbnnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlmmnPmMmMmUqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpmUqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwriioiorjjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwrIioiorJjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwrUioiorVjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwsmioioEPjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwQsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwsmioioEQjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnIsRsRsRsRsRsRsRsRsRsRsRsRozmUsSsSmUnJmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwsYsZsZsYjwjwjwjwmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwuktkioioioiotltltmjwjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptqtrtetstttetutvtetetetgsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwtAtBioioioioioioioioiotCjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDtFtGtetetgsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBrbtKrbtLqBqBtMtNtOtPtQtRtQqoqoqoqotSioioioioioiotTioioioiotUjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBqBugqBqBuhtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioiounjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuuuvuwuxtesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwuFuGioioioiouHuHuIjwjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBrbuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwsYuSuSsYjwjwjwjwmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtetetetetetetetZtDvdtDuWsGsGsGsGsGsGsGuXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPqBvgrbrbrbvhrbrbrbvirbrbrbvjqBaPaPaPaPaPaPaPaPaPmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtevkvlvmvkvntetDtDtDvouWsGsGsGsGsGsGsGuXvevpvqvqvqvqvqvrvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPpYqBqBqBqBqBqBrbrbrbqBqBqBqBqBqBqcaPaPaPaPaPmSaPmTmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsdsdsdsdsGsGuoupvsvsvsvsvsuatDtDtetetetetetetetgsGsGuXvevtvuvuvuvuvuvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBvvvwvxvyvzqBvArbvBqBvCvDvDvEvFqBaPaPaPaPaPmSmTmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHvIvIvHsdvJvJsdsdvJvJsdsdvJvJvJvJsdsdsdsdvJvJvJvJsdsdsdsdvJvJsdsdsdsdsdsdvKvKvLsdsGsGuJupvMvsvsvsvstetDtDtDtDtDtetDvNvOtesGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPvRvSvSvSvSvSqBrbrbrbqBvTrbrbrbvUvVaPaPaPaPaPnOaPmjmjmjjwjwvWvXjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwawbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvJvKvKvKvKvKvKvJvKvKvKvKvKvKwdvKvKvKvKvKvKvKvKwdvKvKvKwevKvKvKvKvKvKvKvKwfsGsGuTtetewgwhwiwjtetZwkwkwktDuatDtDtDtesGsGuXvevtvuvuwlwlwlwmvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPwnwowpvSvSvSwqrbrbrbwrrbrbrbwswtwuaPaPaPaPaPmSmTmTmjmjmjjwjwjwjwmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphpbmMmMmUnTnTmUmMmMpbmMmMmMmMmMmUTLTLnRnPmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoIoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpnJmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwqnqnqnjwjwaRaRaRaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpPpOpQmpmpmppOpPpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqnqnqnjwqmrjrVrJaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpbnnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlmmnPmMmMmUqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwqnqnqnjwjwaRaRaRaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpmUqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwqnqnqnjwrirjrjsnaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwqnqnqnjwrIrjrjsHaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwqnqnqnjwrUrjrjtmaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwqnqnqnjwsmrjrjtCaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwQsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwqnqnqnjwsmrjrjtUaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnIsRsRsRsRsRsRsRsRsRsRsRsRozmUsSsSmUnJmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwjwjwjwjwsYsZsZsYaRaRaRaRmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdsdsdsdsdsdsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwuktkvxuhuIunioioioiotlvWvXaRaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptqtrtetstttetutvtetetetgsGsGsGsdwIxdxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwuFuGioioioioioioioioioioiorjrjwWaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDtFtGtetetgsGsGsdzjxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBtKrbrbtLqBqBwXtNtOtPtQtRtQqoqoqoqotSioioioioioioqoiotTioioioiorjrjwYaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGCuxaxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBugxsqBqBxLtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioioioiorjrjHSaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuuuvuwuxtesGsGsdxaxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwtAtBFxKGKNKMioioioiouHKXMYaRaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdCvxXxaxXCwsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBQRuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwjwjwjwjwsYuSuSsYaRaRaRaRmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtetetetetetetetZtDvdtDuWsGsGsGsGsGsGsGuXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPqBvgrbrbrbvhrbrbrbvirbrbrbvjqBaPaPaPaPaPaPaPaPaPmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtevkvlvmvkvntetDtDtDvouWsGsGsGsGsGsGsGuXvevpvqvqvqvqvqvrvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPpYqBqBqBqBqBqBrbrbrbqBqBqBqBqBqBqcaPaPaPaPaPmSaPmTmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsdsdsdsdsGsGuoupvsvsvsvsvsuatDtDtetetetetetetetgsGsGuXvevtvuvuvuvuvuvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBvvvwCQvyvzqBvArbvBqBvCvDvDvEvFqBaPaPaPaPaPmSmTmjmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHvIvIvHsdvJvJsdsdvJvJsdsdvJvJvJvJsdsdsdsdvJvJvJvJsdsdsdsdvJvJsdsdsdsdsdsdvKvKvLsdsGsGuJupvMvsvsvsvstetDtDtDtDtDtetDvNvOtesGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPvRvSvSvSvSvSqBrbrbrbqBvTrbrbrbvUvVaPaPaPaPaPnOaPmjmjmjqnqnqnqnjwjwQTRdaRaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwawbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvJvKvKvKvKvKvKvJvKvKvKvKvKvKwdvKvKvKvKvKvKvKvKwdvKvKvKwevKvKvKvKvKvKvKvKwfsGsGuTtetewgwhwiwjtetZwkwkwktDuatDtDtDtesGsGuXvevtvuvuwlwlwlwmvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPwnwowpvSvSvSwqrbrbrbwrrbrbrbwswtwuaPaPaPaPaPmSmTmTmjmjmjqnqnqnqnaRaRaRaRmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKwevKvKvKvKvKvKvKvKwfsGsGsGuTtevsvsvsvstetDwkwkwktDtewxteteuKsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwzvSvSvSvSvSwArbrbrbwBrbrbrbrbwCwDaPaPaPaPaPmSaPaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKsdsdsdsdsdsdsdsdsdsdsGsGsGsGuTtewEwFwGtetDtDtDtDtDteteteuKsGsGsGuXvevtvuvuvuvuwHvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwIvSvSvSwJqBuBwKuBqBwLwMwNrbwOqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPvJvJxdvJvJsdvJvJvJvJvJwRwRvJvJsdsdvJvJvJvJsdsdvKvKsdoRwSsdoRwSsdoRwSsdsGsGsGsGsGuTteteteteteteteteteteuKsGsGsGsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwUwVwWwXwYqBwZrbxaqBxbqBqBxcqBqBaPaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxfxexexexexexexexexexgxhxixhwPxjxjxjxlxksdwRwRwRwRwRwRwRxmxnsdxBxBxBxBxBxBsdvKvKsdwTxosdwTxosdwTxosdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvuvuxpxpxpxqvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxrvSxsqBqBqBrbrbxtqBqBqBxurbxvqBaPaPaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbwPxzxexexexAxAxexexexexCxexexewPxDxjxjxjxjsdwRxExFxGxEwRwRwRwRsdxBxIxHxHxWxBvJvKvKsdxZyasdxZyasdxZyasdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxJxKxLqBaPqBxMxMxMqBaPqBqFxNxOqBaPaPaPaPaPaPaPmSaPmTaPmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKsdsdsdsdsdsdsdsdsdsdsGsGsGsGuTtewEwFwGtetDtDtDtDtDteteteuKsGsGsGuXvevtvuvuvuvuwHvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBCRvSvSvSwJqBuBwKuBqBwLwMwNrbwOqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPvJvJDivJvJsdvJvJvJvJvJwRwRvJvJsdsdvJvJvJvJsdsdvKvKsdoRwSsdoRwSsdoRwSsdsGsGsGsGsGuTteteteteteteteteteteuKsGsGsGsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwUwVSpTISUqBwZrbDjqBxbqBqBxcqBqBaPaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxfxexexexexexexexexexgxhxixhwPxjxjxjxlxksdwRwRwRwRwRwRwRxmxnsdxBxBxBxBxBxBsdvKvKsdwTxosdwTxosdwTxosdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvuvuxpxpxpxqvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxrvSTJqBqBqBDkrbxtqBqBqBxurbxvqBaPaPaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbwPxzxexexexAxAxexexexexCxexexewPxDxjxjxjxjsdwRxExFxGxEwRwRwRwRsdxBxIxHxHxWxBvJvKvKsdxZyasdxZyasdxZyasdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxJxKTKqBaPqBxMxMxMqBaPqBqFxNxOqBaPaPaPaPaPaPaPmSaPmTaPmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxywbwbwbwPxzxexexQxPxSylxexexexgxhxixhwPxRxjxjxjxjsdwRxExVxVxEwRwRwRwRsdxBykxXxYyTxBvJvKvKsdzbsdsdzbsdsdzbsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsduXveybycvuvuvuydyevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxMxMxMqBaPsfyfygyhshaPqBxMxMxMqBaPaPaPaPaPaPaPmSmTmTmTmTmTmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxzxexexQyjxTylxexexewPwPwPwPwPxUxUxUxjxjsdwRwRwRwRwRwRwRynxEsdxBykxXxXyTxBsdvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveypyqyryryryqysvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPsfyfygyhshaPaPaPaPaPaPaPsfyfygyhshaPaPaPaPaPaPaPmSaPmTaPmTaPaPmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPyixexexeyvyvxexexexexgxhxixhwPymyuytxjxjsdwRxExVxGxEwRwRwRwRsdxBykxXxXyTxBywvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveveyAyByByByCvevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPyDxexexexexexexexexexCxexexewPyxxjxjxjxjsdwRxExVyFxEwRwRwRwRsdxBykxXxXyTxBsdvKvKsdvJvJvJvJvJvJvJvJvJsdsdsdsdsdsdsdsdsdsdsdsdvKvKsdsdsdsdsdsdsdsduXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPyyyHxexexexexexexexexgxhxixhyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIsdxBykxXyJyTxBvJvKvKsdvKyKyLyMyNvKyOyPyQsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbwPwPwPwPxexexeySyzwPwPwPwPwPwPyIyUyVyWyIyXyYyYyYyYyYyYyYyYyZzasdxBxZTOTOTPxBvJvKvKvJvKyKzczdyNvKzezfzgsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzizixgxexexexezjwPyEzhyGyGyGyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxBxBxBxBxBxBsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzizixgxexexexeDlwPyEzhyGyGyGyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxBxBxBxBxBxBsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexezrxexexeySzkwPzlxexexexeyIyVyVyVzuyYyYzvyYzozpyYzwzxzyyYsdsdvJvJvJvJsdsdvKvKzzvKvKvKvKzAzBzCvKvKsdvKvKvKvKvKvKzDsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPzEzFzGzEzFzFzHzIzJzFzKzLmTmTvHzMwbwbwPxexezrxexeTQzmzPwPzsxexAxexeyIyVyVzRyIzSyYzTyYzozpyYzwzxzyyYyIvKvKvKvKvKvKvKvKvKvJvKvKvKvKzCzCzDvKvKzUvKzVvKvKzVvKzCsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzrxgxgxgxgxgxgwPxgAfxexeAgyIAhyVzRyIzSyYyYyYTezpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj @@ -2571,29 +2578,29 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmT aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHBFBFBFwPxexexexexexexexexexewPwPBGBGwPyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIBIsdsdsdsdsdAQAQAQAwEaEaAwsdsdsdsdsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBSwbwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbBTBUBVwbvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHwbwbBUBVwPxexexewPAtAtwPwPxexewPBXxexeCkyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIsdsdAQAQAQAQAQAQAQAQAQAQAQAwAwsdsdAwAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbCgwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbChwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbCiBVzrxexexewPxexexewPxexewPzNxexeCkyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIsdClAQAQAQAQAQAQAQAQAQAQAQClAwAwsdAwCmAQAQAQAQAQAQAQAQAQCmAwwdvKvKAxAxAxAxAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbCiwbwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCiBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbwbBUwbzrxexexewPxexezOwPxexewPCtxexeCkyIyICuCvCvCwyICxCxyICuCvCvCwyIyIAQAQAQAQCyCzCACACACBCCAQAQAQAQAwAwAwAwAwAwAwAQAQAQAwAwAwAwAwsdvKvKCDAWAWAWAxBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwPCKxexexgxezQCMxgxexewPzNxexeCkwPCNCOCPCOCPCQAQAQCRCOCSCOCOCTAwAQAQAQCUCVCWCWCWCWCWCXCYAQAQAQAwCOCPCOCNCPCQAQAQAQCRCPCOCOCZsdvKvKAxDaAWDbAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwPwPzrzrxgAeDhxgxgzrzrwPwPwPwPwPwPDiDjDjDjDjDkAQAQDlDjDjDjDjDmAwAQAQDnDoCWCWCWCWCWCWCWDpCCAQAQAwDiDjDjDjDjDkAQAQAQDlDjDjDjDmAwTRTRAxAWDrDsAYBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbCiwbwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCiBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbwbBUwbzrxexexewPxexezOwPxexewPCtxexeCkyIyIDmDmDmDmyICxCxyIDmDmDmDmyIyIAQAQAQAQCyCzCACACACBCCAQAQAQAQAwAwAwAwAwAwAwAQAQAQAwAwAwAwAwsdvKvKCDAWAWAWAxBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwPCKxexexgxezQCMxgxexewPzNxexeCkwPCNCOCPCOCPEaAQAQEaCOCSCOCOCTAwAQAQAQCUCVCWCWCWCWCWCXCYAQAQAQAwCOCPCOCNCPEaAQAQAQEaCPCOCOCZsdvKvKAxDaAWDbAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwPwPzrzrxgAeDhxgxgzrzrwPwPwPwPwPwPEaEaEaEaEaEaAQAQEaEaEaEaEaEaAwAQAQDnDoCWCWCWCWCWCWCWDpCCAQAQAwEaEaEaEaEaEaAQAQAQEaEaEaEaEaAwTRTRAxAWDrDsAYBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGDtDuvGwbwbwbwbDvDwDxDvDwDyDzDADwDxDvDwDxwbwbvGDBDtDuvGwbwbDvDwDxDvDwDyDzDADwDxDvDwDxwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQDDCWCWCWDEDFDGCWCWCWDDAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAwAQAQAYDHDIAYAxAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGDKxxDLwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbDMDNDKxxDOwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWDEDRDRDRDGCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPDVmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdBhmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmd aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGxxxxDWwbwbwbwbwbwbwbwbwbwbDXwbwbwbwbwbwbwbwbDYDZvHxxDWwbwbwbwbwbwbwbwbDXwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEaAQAQAQAwAQAQAwAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEbDREcDREdCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAYAWAWAWAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEgxxEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEhDRDRDREiCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEjEkvGwbwbwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbvGErEjEsvGwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQEtCWCWCWEhEuEvCWCWCWEwAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAxAGAGAxAxAxAxAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyDiDjDjDjDjEBAQAQECDjDjDjDjDmAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwDiDjDjDjDjEBAQAQECDjDjDjDjDmAxBcBcBHBiBYBWAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyEREMEMFaFpFoFoFqEMFrEyFFGnGmGuEyCSCNCOCPCPESAQAQESCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPESAQAQESCOCPCOEXETAxBcBcBcBcBcBcAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMGvEyGwEMEZGxEyFbFcFdFdFeFbFfFfFbFcFdFdFeFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxBcBcBcBcBcBcAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyEaEaEaEaEaEaAQAQEaEaEaEaEaEaAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwEaEaEaEaEaEaAQAQEaEaEaEaEaEaAxBcBcBHBiBYBWAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyEREMEMFaFpFoFoFqEMFrEyFFGnGmGuEyCSCNCOCPCPEaAQAQEaCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPEaAQAQEaCOCPCOEXETAxBcBcBcBcBcBcAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMGvEyGwEMEZGxEyFbEBEBEBEBFbFfFfFbEBEBEBEBFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxBcBcBcBcBcBcAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMGIGyEMEMGIGyEMGvEyGKEMEMGLEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxBcBcCsCjBcCsAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyJkEMGIGyEMEMGIGyEMGvEyHaEMEZGxEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxBcBcCsCjBcCsAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyHEEMGIGyEMEMGIGyEMGvEyHFHZHGIaEyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxBcBcCsCjBcCsAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyHEEMEMEMEMEMEMEMEMGvEyEyGwIjFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxBcBcCsCjBcCsAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyHEEMEMFrImImImImImIpEyIrFqEMIsEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxBcBcCsCjBcCsAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyHEEMEMEMEMEMEMEMEMGvEyEyGwIjFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxBcBcCsCjBcCsAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyHEEMEMFrImImImImImIpEyIrFqEMIsEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxBcBcCsCjBcCsAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyIxIuIzIyIuIDEyHEEMEMIKEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxBcBcCsCjBcCsAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyHEEMEMILFqGJEMEMGJFaIVFqEMEMIWEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxBcBcCsCjBcCsAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIZEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBcBcBcBcBcBcAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyHEEMEMILFqGJEMEMGJFaIVFqEMEMIWEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxBcBcCsCjBcCsAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIZEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBcBcBcBcBcBcAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIWEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxBcBcBcBcBcBcAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyHEEMFrImImImJkFrImImJkEMEMEMIZEyHsHtHtFtFtHuHvHvHvTSHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxBcBcCLCLCLCLAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMGvEAEAEAHEGvHDFVHEFrJmJlJnEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxBcBcDgDgDgDgAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyJoEMFaJpJrJqFqFaJHEyJPJOEyEyEyEyHSHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxBcBcBcBcBcBcAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyJoEMFaJpJrJqFqFaJHEyJPJOEyEyEyEyEQHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxBcBcBcBcBcBcAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyJoEMEMEMEMEMEMEMJQEyJPJRKeKeKfEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxDqBcBcBcBcAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPGWGfFIGkIiGfFIGkIiGfFIGkGWaPaPvHwbwbwbEyJoEMEMEMHQHREMEMKgEyJPEMIkIlKqEyFbFbFbFbFbFbFbFbFbFbFbFbFbFbFbHeHeHeHxHxHxHxHxHxHxHxHxHeHeHeFhInGQInGQInGSGQGQHWInGQInGQInAxAYAYAYAYAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbIovHaPaPIiGfFIGkIiGfFTGkIiGfFIGkIiaPaPvHwbwbwbEyKCEMEMEMEMEMEMEMKDEyJPEMEMIqKqEyKFKEKEKEKJHeHxHxHxHxHxHxHxHxHxHxHxHeHeItHeHeHxHeHeItHeHeHxHxHeHeHeFhFhFhFhFhFhFhFhFhFhFhFhFhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2603,7 +2610,7 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIISFIFIFIFIFIISFIFIITHzxxHzwbwbwbEyEyIUEyHDEyEyOTEMPiEyJPEMEMEMEMIXEMEMIYEMRWHeHxHeJaIGIGIGIGJbHeIQJcJcJcJcJcIQIQIQJcJcJcJcJdJeHeHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGJfFRJgJhFkFmJiFkFmJhJgFRJjvGvGvGwbwbwbEyTVEMTXTWTYEyTZEMUaEyUcUbUeUdUfEyUhUgUgUgUiHeHxHeJaJsJtJtIGIGJuIQIQJvJwJvIQIQIQIQIQJvJwJvJxIQHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHaPaPHnJyJzHnJAJBJCJDJEHnJFJGHnaPaPvHvIvIvIEyTVEMUkUjUlEyUmEMUnEyEyEyEyEyEyEyEyEyEyEyHeHeHxHeHeHeHeHeHeHeHeIQJcJcJcJcJcIQIQIQJcJcJcJcJIIQHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyUpUoUqEAUrJpJpUsUsUtHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyUpUoUqEAFcESJpUsUsUtHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKcKdHnaPaPwvwbwbwbEyUuEMTXUvUwEyHEEMFaJpFqEMFaEAFqEMEMEMEMGvHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnisKnJCKoKpHnKlKlJjaPaPvGwbwbwbEyUxEMEMEMUyEyHEEMEMFrImEMEMKrEMEMEMEMEMGvHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyUzEMEMIYUAEyUBEMEMGvUCEMEHEAJkEMEZEMEMGvHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2628,7 +2635,7 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMtMuMgMvMwMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMAMBMCMCMBMDMEMEMEMFMGMHMEMEMIMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLVLVLNLNLNLNLNLNLNLNLNLNLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMKMLMLMKMfMMMNMEMEMEMEMEMEMOMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLSLNLNLNLNLNLNLNLNLNLNLNLNLNLQLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMEMEMEMQMRMSMEMEMTMBLZLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLULSLNLNLNLNLNLNLNLNLNLNLNLNLSLNLNLMaR -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMUMVMEMWMXMYMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNNaLNNbLNNbLNNcLNLNLNLNLNLMaR +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMUMVMEMWMXGaMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNNaLNNbLNNbLNNcLNLNLNLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNdMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMALZLZLZLZMBNeNeMBLZLZLZLZMDMLMPMPMLMfNfMEMEMEMEMEMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNNgLNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMcLZLZMBNhMBNiMBNjMBNiMBNkMBNiMBMeMBNiMBNlMBNiMBMeMBMDNmMLMLMLMLNnMLMLMLMLMLMKMfMLMPMPMLMfMUMVMEMENoNoNpNqNqNrMBLZNsLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNuMKMLMLMLMLMLMLNvMLMLMLNwMLMLMLMLMLMLMLNxMLMLNyNzNAMBMLMPMPMPMPMPMPMPMPMPMPMLMBMLMPMPMLMBNBNCNDNDNBNENCMBLZLZMDNFMPNGNHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNINJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNIaR @@ -2648,8 +2655,8 @@ aRmjmjmjOvOPOvOvOvmjmjOvOgOgOgOgPgOxOwOgPgOwOgOxOxOxOgPbPbPbPhOgmjmjaRmjmjmjaPmd aRmjmjmjOvOPOPOvmjmjmjOvPjPkPkOgOgOgOgOgOgOgOgOxOxOxOgPbPbPbPlOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjOvOPOPOPOPOvOvmjmjOvPmPnPmOMOxOxOxOxOxOxOxOxOxOxOgPoPpPqOgOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRaR aRmjPrOPOPOPOPOPOvmjmjOgPsPmPmOMOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR -aRmjPuPvPtOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjPAOPPwOPPtOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjPuPvPwOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjPAOPPwOPPwOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvOPPwOPPxOPOPmjmjaPaPmjOgOxOwOxOxOxOxOgPDPDPHPDPDOgOxOxOxOxOwOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvPIOPOPOPPKOPmjmjaPaPmjOgOxOxOxOxOxOxOMPDPDPLPDPDOMOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvOvOPOPOPOPOvmjmjmSaPaPOgOxOxOgPMPNPOOgPDPPPBPDKmOgPMPNPOOgOxOxOgaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2663,9 +2670,9 @@ aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQiQjPFaPaPPYPFPFQkPQQmQaPFPZaPaPPFQoQpPFaPaPaPaPmd aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQqQrPFaPaPPFPFQsQtQuQtQvPFPFaPaPPFQwQxPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQyPFPFPFPFPFQzQAQAQAQAQAQBPFPFPFPFPFQCPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQDQEQFQGQHPFQIQAQAQAQAQAQIPFQJQKQLQMQNPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQRQSQTQUQRQSQTPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQdQeQfQUQdQeQfPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjaPaPaPaPaPaPaPaPaPaPaPQXQOQPQPQPQPQUQAQAQAQAQAQAQAQUQPQPQYQPQOQXaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcRdQAQAQAQARePFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcGcQAQAQAQARePFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPaPaPRhRaQPQPPFRiPFPFPFRjTERlPFPFPFRiPFRmRnRoRhaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPaPPYPFTFRqRqPFRrRsRrQXRtQlRvQXRwRxRyPFRzRATGPFPZaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRDRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPmjmjaPaPaPREPFRFRFPFPFRrRrRrQZRtRkRvQZRyRyRGPFPFRFRFPFRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRSRTRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm index 3207a9d9c9..c24b4c0edb 100644 --- a/maps/polaris-3.dmm +++ b/maps/polaris-3.dmm @@ -220,6 +220,7 @@ "el" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_inner"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/turf/simulated/floor/plating,/area/tcommsat/chamber) "em" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcomsat) "en" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/tcomsat) +"eo" = (/obj/machinery/exonet_node{anchored = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ep" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "eq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/tcomsat) "er" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -252,7 +253,6 @@ "eV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "eW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/tcomsat) "eX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecoms Storage"},/turf/simulated/floor,/area/tcomsat) -"eY" = (/obj/machinery/exonet_node,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eZ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing Central"; dir = 8},/turf/space,/area/tcomsat) "fa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat) "fb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/tcomsat) @@ -537,7 +537,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacaaaaabqclclcocncocRepeqdGererereseteueverewexeyezeAdGefemcXcocncoclclblbvaaaacacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbbvaTbqclclcocncocReCeDdGerezezezeEezezezeEezezezerdGefemcXeGeFeHclclclbqaTbtccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdbqaabqclclcocncocReIeMdGereOeNePeEezerezeEezeReSerdGeTeUcXeLeWeXeQclclbqaabqcdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocReVeZdGerezezezeEezeYezeEezezezerdGfbfcfdfafffgfeclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocReVeZdGerezezezeEezeoezeEezezezerdGfbfcfdfafffgfeclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTcecgcfclclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclclchcgciaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacabqaabqclclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclclbqaabqcacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-5.dmm b/maps/polaris-5.dmm index 72b2aeb616..cd9003f698 100644 --- a/maps/polaris-5.dmm +++ b/maps/polaris-5.dmm @@ -120,9 +120,9 @@ "cp" = (/turf/simulated/floor/airless,/area/outpost/research/test_area) "cq" = (/obj/machinery/light{dir = 4},/obj/machinery/camera/network/research{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Research","Toxins Test Area")},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) "cr" = (/obj/machinery/door/blast/regular{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"cs" = (/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/heat_exchanging/junction,/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"ct" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"cu" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) +"cs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"ct" = (/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/heat_exchanging/junction,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"cu" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) "cv" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing) "cw" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "cx" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing) @@ -144,8 +144,8 @@ "cN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/toxins_launch) "cO" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) "cP" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) -"cQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"cR" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) +"cQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"cR" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) "cS" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access = list(7)},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "cT" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2; frequency = 1379; id = "tox_airlock_pump"},/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_interior"; output = 63; pixel_x = -8; pixel_y = -18},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "cU" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access = list(7)},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) @@ -168,9 +168,9 @@ "dl" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "dm" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space) "dn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/outpost/research/test_area) -"do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"dq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) +"do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"dq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) "dr" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "ds" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing) "dt" = (/obj/machinery/button/remote/blast_door{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access = list(7)},/obj/machinery/button/ignition{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) @@ -1664,9 +1664,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadbubvbwbxbybzbAadbBbCbDafbEbFbGbHbIbgakafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatatatbsatatatbtatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbJbKbLbMbNbObPadadbQbRbSafafbFbTbHbUbUbUbUbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbVbVbVbVatbsbWbtatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXbYbZcaadadadcbcccKadcecfcgchciafafafakbUcjckclcmcncnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocpcpcpcpcpcpcpcpauatatatatcqauamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHdJcJdQbUcLcMcNbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbWbWbWbWatcObVcPatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrctcscucvcwcxcyczcAcBcCcDcEcFcGcHdJcJdQbUcLcMcNbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbWbWbWbWatcObVcPatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcQcQcRcScTcUcVcWcWcXcYcZaedadbdcdddedfdgdhdidjdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldHdnalalatatatatcOatatatcPatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdodpdqcvdrdsdtczducBdvdwdxdydzcHdAdBdCbUdDdEdFdGdldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlDDcpcpdIatatatcOatatatatatcPatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdpdodqcvdrdsdtczducBdvdwdxdydzcHdAdBdCbUdDdEdFdGdldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlDDcpcpdIatatatcOatatatatatcPatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXadadadadadadewdKdLaddMdNdOdPfjdRdRdRdSbUdTdUdVdWdXdYdlaaaaaadldZdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeaebcpalalatatatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadecedeeefegeheiadadbQejekdRdRelemenbUbUbUbUbUffeodXdXdXdXdXepacacacacacacacacacacacacacacacaceqeqereqalalatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadedeeeseseseeetadbBeuevdRfnexeyezeADXpEDZDYEaoVacacacacacacacacacacacacacacacacacacacacacacacacacacacalalatatateDatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/images/nanomap_z1.png b/nano/images/nanomap_z1.png index f67a0fad68..a77de6e1d8 100644 Binary files a/nano/images/nanomap_z1.png and b/nano/images/nanomap_z1.png differ diff --git a/nano/mapbase1024.png b/nano/mapbase1024.png deleted file mode 100644 index a927a71b6e..0000000000 Binary files a/nano/mapbase1024.png and /dev/null differ diff --git a/nano/mapbase1200.png b/nano/mapbase1200.png new file mode 100644 index 0000000000..868adfe0d5 Binary files /dev/null and b/nano/mapbase1200.png differ diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 756f6edce0..396cf8e34f 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -775,14 +775,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
Status:
- {{if value.mode == 0}} - Idle - {{else value.mode == 1}} - Moving - {{else value.mode == 2}} - Unloading - {{else}} - Calculating path + {{if value.paused == 0}} + Nominal + {{else value.paused == 1}} + Paused {{/if}}
diff --git a/polaris.dme b/polaris.dme index 4b7f510b1e..871fddeff9 100644 --- a/polaris.dme +++ b/polaris.dme @@ -11,6 +11,7 @@ // END_PREFERENCES // BEGIN_INCLUDE #include "code\_macros.dm" +#include "code\_unit_tests.dm" #include "code\global.dm" #include "code\hub.dm" #include "code\names.dm" @@ -18,6 +19,7 @@ #include "code\world.dm" #include "code\__defines\_compile_options.dm" #include "code\__defines\admin.dm" +#include "code\__defines\appearance.dm" #include "code\__defines\atmos.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\damage_organs.dm" @@ -33,6 +35,7 @@ #include "code\__defines\species_languages.dm" #include "code\__defines\targeting.dm" #include "code\__defines\turfs.dm" +#include "code\__defines\unit_tests.dm" #include "code\_compatibility\509\_JSON.dm" #include "code\_compatibility\509\JSON Reader.dm" #include "code\_compatibility\509\JSON Writer.dm" @@ -160,6 +163,7 @@ #include "code\datums\mixed.dm" #include "code\datums\modules.dm" #include "code\datums\organs.dm" +#include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" #include "code\datums\sun.dm" #include "code\datums\supplypacks.dm" @@ -259,6 +263,7 @@ #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\calamity\calamity.dm" +#include "code\game\gamemodes\changeling\absorbed_dna.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" #include "code\game\gamemodes\changeling\generic_equip_procs.dm" @@ -921,6 +926,7 @@ #include "code\modules\admin\verbs\diagnostics.dm" #include "code\modules\admin\verbs\dice.dm" #include "code\modules\admin\verbs\getlogs.dm" +#include "code\modules\admin\verbs\grief_fixers.dm" #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\massmodvar.dm" #include "code\modules\admin\verbs\modifyvariables.dm" @@ -972,6 +978,7 @@ #include "code\modules\client\preferences_factions.dm" #include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_spawnpoints.dm" +#include "code\modules\client\preferences_toggle_procs.dm" #include "code\modules\client\ui_style.dm" #include "code\modules\client\preference_setup\preference_setup.dm" #include "code\modules\client\preference_setup\antagonism\01_basic.dm" @@ -987,6 +994,7 @@ #include "code\modules\client\preference_setup\global\03_pai.dm" #include "code\modules\client\preference_setup\global\04_communicators.dm" #include "code\modules\client\preference_setup\global\setting_datums.dm" +#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" #include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" #include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm" @@ -1671,6 +1679,7 @@ #include "code\modules\reagents\reagent_containers\food\cans.dm" #include "code\modules\reagents\reagent_containers\food\condiment.dm" #include "code\modules\reagents\reagent_containers\food\drinks.dm" +#include "code\modules\reagents\reagent_containers\food\lunch.dm" #include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" @@ -1858,6 +1867,12 @@ #include "code\modules\virus2\items_devices.dm" #include "code\modules\xgm\xgm_gas_data.dm" #include "code\modules\xgm\xgm_gas_mixture.dm" +#include "code\unit_tests\loadout_tests.dm" +#include "code\unit_tests\map_tests.dm" +#include "code\unit_tests\mob_tests.dm" +#include "code\unit_tests\research_tests.dm" +#include "code\unit_tests\unit_test.dm" +#include "code\unit_tests\zas_tests.dm" #include "code\ZAS\_docs.dm" #include "code\ZAS\Airflow.dm" #include "code\ZAS\Atom.dm"