diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm
index 8f1775261d5..b5014ec7c91 100644
--- a/code/_globalvars/lists/objects.dm
+++ b/code/_globalvars/lists/objects.dm
@@ -10,6 +10,7 @@ var/global/list/deliverybeacons = list() //list of all MULEbot delivery beacon
var/global/list/deliverybeacontags = list() //list of all tags associated with delivery beacons.
var/global/list/nuke_list = list()
var/global/list/nuke_tiles = list() //list of all turfs that turn to animated red grids when a nuke is triggered
+var/global/list/alarmdisplay = list() //list of all machines or programs that can display station alerts
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 5032ea6ec26..4b82ec57231 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -74,6 +74,11 @@
D.cancelAlarm("Power", src, source)
else
D.triggerAlarm("Power", src, cameras, source)
+ for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay)
+ if(state == 1)
+ p.cancelAlarm("Power", src, source)
+ else
+ p.triggerAlarm("Power", src, cameras, source)
/area/proc/atmosalert(danger_level, obj/source)
if(danger_level != atmosalm)
@@ -89,6 +94,8 @@
a.triggerAlarm("Atmosphere", src, cameras, source)
for(var/mob/living/simple_animal/drone/D in mob_list)
D.triggerAlarm("Atmosphere", src, cameras, source)
+ for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay)
+ p.triggerAlarm("Atmosphere", src, cameras, source)
else if (src.atmosalm == 2)
for(var/mob/living/silicon/aiPlayer in player_list)
@@ -97,6 +104,8 @@
a.cancelAlarm("Atmosphere", src, source)
for(var/mob/living/simple_animal/drone/D in mob_list)
D.cancelAlarm("Atmosphere", src, source)
+ for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay)
+ p.cancelAlarm("Atmosphere", src, source)
src.atmosalm = danger_level
return 1
@@ -128,6 +137,8 @@
aiPlayer.triggerAlarm("Fire", src, cameras, source)
for (var/mob/living/simple_animal/drone/D in mob_list)
D.triggerAlarm("Fire", src, cameras, source)
+ for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay)
+ p.triggerAlarm("Fire", src, cameras, source)
/area/proc/firereset(obj/source)
for(var/area/RA in related)
@@ -150,6 +161,8 @@
a.cancelAlarm("Fire", src, source)
for (var/mob/living/simple_animal/drone/D in mob_list)
D.cancelAlarm("Fire", src, source)
+ for(var/datum/computer_file/program/alarm_monitor/p in alarmdisplay)
+ p.cancelAlarm("Fire", src, source)
/area/proc/burglaralert(obj/trigger)
if(always_unpowered == 1) //no burglar alarms in space/asteroid
diff --git a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm
index d0f7d88d53a..a3310dec696 100644
--- a/code/modules/modular_computers/NTNet/NTNRC/conversation.dm
+++ b/code/modules/modular_computers/NTNet/NTNRC/conversation.dm
@@ -16,12 +16,12 @@ var/global/ntnrc_uid = 0
..()
/datum/ntnet_conversation/proc/add_message(var/message, var/username)
- message = "[stationtime2text()] [username]: [message]"
+ message = "[worldtime2text()] [username]: [message]"
messages.Add(message)
trim_message_list()
/datum/ntnet_conversation/proc/add_status_message(var/message)
- messages.Add("[stationtime2text()] -!- [message]")
+ messages.Add("[worldtime2text()] -!- [message]")
trim_message_list()
/datum/ntnet_conversation/proc/trim_message_list()
diff --git a/code/modules/modular_computers/NTNet/NTNet.dm b/code/modules/modular_computers/NTNet/NTNet.dm
index 39f0400c47f..d1d67403d9e 100644
--- a/code/modules/modular_computers/NTNet/NTNet.dm
+++ b/code/modules/modular_computers/NTNet/NTNet.dm
@@ -7,7 +7,6 @@ var/global/datum/ntnet/ntnet_global = new()
var/list/logs = list()
var/list/available_station_software = list()
var/list/available_antag_software = list()
- var/list/available_news = list()
var/list/chat_channels = list()
var/list/fileservers = list()
// Amount of logs the system tries to keep in memory. Keep below 999 to prevent byond from acting weirdly.
@@ -33,7 +32,6 @@ var/global/datum/ntnet/ntnet_global = new()
relays.Add(R)
R.NTNet = src
build_software_lists()
- build_news_list()
add_log("NTNet logging system activated.")
// Simplified logging: Adds a log. log_string is mandatory parameter, source is optional.
@@ -95,17 +93,6 @@ var/global/datum/ntnet/ntnet_global = new()
if(prog.available_on_syndinet)
available_antag_software.Add(prog)
-// Builds lists that contain downloadable software.
-/datum/ntnet/proc/build_news_list()
-/*
- available_news = list()
- for(var/F in typesof(/datum/computer_file/data/news_article/))
- var/datum/computer_file/data/news_article/news = new F(1)
- if(news.stored_data)
- available_news.Add(news)
-*/
- return 1
-
// Attempts to find a downloadable file according to filename var
/datum/ntnet/proc/find_ntnet_file_by_name(var/filename)
for(var/datum/computer_file/program/P in available_station_software)
@@ -154,8 +141,3 @@ var/global/datum/ntnet/ntnet_global = new()
if(NTNET_SYSTEMCONTROL)
setting_systemcontrol = !setting_systemcontrol
add_log("Configuration Updated. Wireless network firewall now [setting_systemcontrol ? "allows" : "disallows"] remote control of station's systems.")
-
-
-
-
-
diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm
index de40b427476..00c6447f7e6 100644
--- a/code/modules/modular_computers/NTNet/NTNet_relay.dm
+++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm
@@ -57,12 +57,12 @@
ntnet_global.add_log("Quantum relay switched from overload recovery mode to normal operation mode.")
..()
-/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 1, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+/obj/machinery/ntnet_relay/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
- ui = new(user, src, ui_key, "nt_relay", name, 300, 150, master_ui, state)
+ ui = new(user, src, ui_key, "ntnet_relay", "NTNet Quantum Relay", 500, 300, master_ui, state)
ui.open()
@@ -137,11 +137,11 @@
ntnet_global.relays.Remove(src)
ntnet_global.add_log("Quantum relay connection severed. Current amount of linked relays: [NTNet.relays.len]")
NTNet = null
-/*
+
for(var/datum/computer_file/program/ntnet_dos/D in dos_sources)
D.target = null
D.error = "Connection to quantum relay severed"
-*/
+
..()
/obj/machinery/ntnet_relay/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
@@ -159,7 +159,7 @@
for(var/atom/movable/A in component_parts)
A.forceMove(src.loc)
-// new/obj/machinery/constructable_frame/machine_frame(src.loc)
+ new/obj/structure/frame/machine(src.loc)
qdel(src)
return
..()
\ No newline at end of file
diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm
deleted file mode 100644
index 2335ce08e73..00000000000
--- a/code/modules/modular_computers/_description.dm
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-Program-based computers, designed to replace computer3 project and eventually most consoles on station
-
-
-1. Basic information
-Program based computers will allow you to do multiple things from single computer. Each computer will have programs, with more being downloadable from NTNet (stationwide network with wireless coverage)
-if user has apropriate ID card access. It will be possible to hack the computer by using an emag on it - the emag will have to be completely new and will be consumed on use, but it will
-lift ALL locks on ALL installed programs, and allow download of programs even if your ID doesn't have access to them. Computers will have hard drives that can store files.
-Files can be programs (datum/computer_file/program/ subtype) or data files (datum/computer_file/data/ subtypes). Program for sending files will be available that will allow transfer via NTNet.
-NTNet coverage will be limited to station's Z level, but better network card (=more expensive and higher power use) will allow usage everywhere. Hard drives will have limited capacity for files
-which will be related to how good hard drive you buy when purchasing the laptop. For storing more files USB-style drives will be buildable with Protolathe in research.
-
-2. Available devices
-CONSOLES
-Consoles will come in various pre-fabricated loadouts, each loadout starting with certain set of programs (aka Engineering console, Medical console, etc.), of course, more software may be downloaded.
-Consoles won't usually have integrated battery, but the possibility to install one will exist for critical applications. Consoles are considered hardwired into NTNet network which means they
-will have working coverage on higher speed (Ethernet is faster than Wi-Fi) and won't require wireless coverage to exist.
-LAPTOPS
-Laptops are middle ground between actual portable devices and full consoles. They offer certain level of mobility, as they can be closed, moved somewhere else and then opened again.
-Laptops will by default have internal battery to power them, and may be recharged with rechargers. However, laptops rely on wireless NTNet coverage. Laptop HDDs are also designed with power efficiency
-in mind, which means they sacrifice some storage space for higher battery life. Laptops may be dispensed from computer vendor machine, and may be customised before vending. For people which don't
-want to rely on internal battery, tesla link exists that connects to APC, if one exists.
-TABLETS
-Tablets are smallest available devices, designed with full mobility in mind. Tablets have only weak CPU which means the software they can run is somewhat limited. They are also designed with high
-battery life in mind, which means the hardware focuses on power efficiency rather than high performance. This is most visible with hard drives which have quite small storage capacity.
-Tablets can't be equipped with tesla link, which means they have to be recharged manually.
-
-
-3. Computer Hardware
-Computers will come with basic hardware installed, with upgrades being selectable when purchasing the device.
-Hard Drive: Stores data, mandatory for the computer to work
-Network Card: Connects to NTNet
-Battery: Internal power source that ensures the computer operates when not connected to APC.
-Extras (those won't be installed by default, but can be bought)
-ID Card Slot: Required for HoP-style programs to work. Access for security record-style programs is read from ID of user [RFID?] without requiring this
-APC Tesla Relay: Wirelessly powers the device from APC. Consoles have it by default. Laptops can buy it.
-Disk Drive: Allows usage of portable data disks.
-Nano Printer: Allows the computer to scan paper contents and save them to file, as well as recycle papers and print stuff on it.
-
-4. NTNet
-NTNet is stationwide network that allows users to download programs needed for their work. It will be possible to send any files to other active computers using relevant program (NTN Transfer).
-NTNet is under jurisdiction of both Engineering and Research. Engineering is responsible for any repairs if necessary and research is responsible for monitoring. It is similar to PDA messaging.
-Operation requires functional "NTNet Relay" which is by default placed on tcommsat. If the relay is damaged NTNet will be offline until it is replaced. Multiple relays bring extra redundancy,
-if one is destroyed the second will take over. If all relays are gone it stops working, simple as that. NTNet may be altered via administration console available to Research Director. It is
-possible to enable/disable Software Downloading, P2P file transfers and Communication (IC version of IRC, PDA messages for more than two people)
-
-5. Software
-Software would almost exclusively use NanoUI modules. Few exceptions are text editor (uses similar screen as TCS IDE used for editing and classic HTML for previewing as Nano looks differently)
-and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network.
-What i plan to add:
-
-Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do
-
-Basic - Software in this bundle is automagically preinstalled in every new computer
- NTN Transfer - Allows P2P transfer of files to other computers that run this.
- Configurator - Allows configuration of computer's hardware, basically status screen.
- File Browser - Allows you to browse all files stored on the computer. Allows renaming/deleting of files.
- TXT Editor - Allows you editing data files in text editor mode.
- NanoPrint - Allows you to operate NanoPrinter hardware to print text files.
- NTNRC Chat - NTNet Relay Chat client. Allows PDA-messaging style messaging for more than two users. Person which created the conversation is Host and has administrative privilegies (kicking, etc.)
- NTNet News - Allows reading news from newscaster network.
-
-Engineering - Requires "Engineering" access on ID card (ie. CE, Atmostech, Engineer)
- Alarm Monitor - Allows monitoring alarms, same as the stationbound one.
- Power Monitor - Power monitoring computer, connects to sensors in same way as regular one does.
- Atmospheric Control - Allows access to the Atmospherics Monitor Console that operates air alarms. Requires extra access: "Atmospherics"
- RCON Remote Control Console - Allows access to the RCON Remote Control Console. Requires extra access: "Power Equipment"
- EngiDB - Allows accessing NTNet information repository for information about engineering-related things.
-
-Medical - Requires "Medbay" access on ID card (ie. CMO, Doctor,..)
- Medical Records Uplink - Allows editing/reading of medical records. Printing requires NanoPrinter hardware.
- MediDB - Allows accessing NTNet information repository for information about medical procedures
- ChemDB - Requires extra access: "Chemistry" - Downloads basic information about recipes from NTNet
-
-Research - Requires "Research and Development" access on ID card (ie. RD, Roboticist, etc.)
- Research Server Monitor - Allows monitoring of research levels on RnD servers. (read only)
- Robotics Monitor Console - Allows monitoring of robots and exosuits. Lockdown/Self-Destruct options are unavailable [balance reasons for malf/traitor AIs]. Requires extra access: "Robotics"
- NTNRC Administration Console - Allows administrative access to NTNRC. This includes bypassing any channel passwords and enabling "invisible" mode for spying on conversations. Requires extra access: "Research Director"
- NTNet Administration Console - Allows remote configuration of NTNet Relay - CAUTION: If NTNet is turned off it won't be possible to turn it on again from the computer, as operation requires NTNet to work! Requires extra access: "Research Director"
- NTNet Monitor - Allows monitoring of NTNet and it's various components, including simplified network logs and system status.
-
-Security - Requires "Security" access on ID card (ie. HOS, Security officer, Detective)
- Security Records Uplink - Allows editing/reading of security records. Printing requires Nanoprinter hardware.
- LawDB - Allows accessing NTNet information repository for security information (corporate regulations)
- Camera Uplink - Allows viewing cameras around the station.
-
-Command - Requires "Bridge" access on ID card (all heads)
- Alertcon Access - Allows changing of alert levels. Red requires activation from two computers with two IDs similar to how those wall mounted devices do.
- Employment Records Access - Allows reading of employment records. Printing requires NanoPrinter hardware.
- Communication Console - Allows sending emergency messages to Central.
- Emergency Shuttle Control Console - Allows calling/recalling the emergency shuttle.
- Shuttle Control Console - Allows control of various shuttles around the station (mining, research, engineering)
-
-*REDACTED* - Can be downloaded from SyndiCorp servers, only via emagged devices. These files are very large and limited to laptops/consoles only.
- SYSCRACK - Allows cracking of secure network terminals, such as, NTNet administration. The sysadmin will probably notice this.
- SYSOVERRIDE - Allows hacking into any device connected to NTNet. User will notice this and may stop the hack by disconnecting from NTNet first. After hacking various options exist, such as stealing/deleting files.
- SYSKILL - Tricks NTNet to force-disconnect a device. The sysadmin will probably notice this.
- SYSDOS - Launches a Denial of Service attack on NTNet relay. Can DoS only one relay at once. Requires NTNet connection. After some time the relay crashes until attack stops. The sysadmin will probably notice this.
- AIHACK - Hacks an AI, allowing you to upload/remove/modify a law even without relevant circuit board. The AI is alerted once the hack starts, and it takes a while for it to complete. Does not work on AIs with zeroth law.
- COREPURGE - Deletes all files on the hard drive, including the undeletable ones. Something like software self-destruct for computer.
-
-6. Security
-Laptops will be password-lockable. If password is set a MD5 hash of it is stored and password is required every time you turn on the laptop.
-Passwords may be decrypted by using special Decrypter (protolathable, RDs office starts with one) device that will slowly decrypt the password.
-Decryption time would be length_of_password * 30 seconds, with maximum being 9 minutes (due to battery life limitations, which is 10+ min).
-If decrypted the password is cleared, so you can keep using your favorite password without people ever actually revealing it (for meta prevention reasons mostly).
-Emagged laptops will have option to enable "Safe Encryption". If safely encrypted laptop is decrypted it loses it's emag status and 50% of files is deleted (randomly selected).
-
-7. System Administrator
-System Administrator will be new job under Research. It's main specifics will be maintaining of computer systems on station, espicially from software side.
-From IC perspective they'd probably know how to build a console or something given they work with computers, but they are mostly programmers/network experts.
-They will have office in research, which will probably replace (and contain) the server room and part of the toxins storage which is currently oversized.
-They will have access to DOWNLOAD (not run) all programs that exist on NTNet. They'll have fairly good amount of available programs, most of them being
-administrative consoles and other very useful things. They'll also be able to monitor NTNet. There will probably be one or two job slots.
-
-8. IDS
-With addition of various antag programs, IDS(Intrusion Detection System) will be added to NTNet. This system can be turned on/off via administration console.
-If enabled, this system automatically detects any abnormality and triggers a warning that's visible on the NTNet status screen, as well as generating a security log.
-IDS can be disabled by simple on/off switch in the configuration.
-
-*/
\ No newline at end of file
diff --git a/code/modules/modular_computers/computers/item/modular_computer.dm b/code/modules/modular_computers/computers/item/modular_computer.dm
index 592f70ade32..780484b44a8 100644
--- a/code/modules/modular_computers/computers/item/modular_computer.dm
+++ b/code/modules/modular_computers/computers/item/modular_computer.dm
@@ -28,7 +28,6 @@
var/icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.
var/max_hardware_size = 0 // Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed.
var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer.
- var/light_strength = 0
// Damage of the chassis. If the chassis takes too much damage it will break apart.
var/damage = 0 // Current damage level
@@ -47,6 +46,8 @@
var/list/idle_threads = list() // Idle programs on background. They still receive process calls but can't be interacted with.
var/activetemplate = "computer_main"
+ var/obj/physical = null
+
// Eject ID card from computer, if it has ID slot with card inside.
@@ -123,7 +124,7 @@
if(response == "Yes")
turn_on(user)
-/obj/item/modular_computer/emag_act(remaining_charges, mob/user)
+/obj/item/modular_computer/emag_act(mob/user)
if(computer_emagged)
user << "\The [src] was already emagged."
return 0
@@ -143,6 +144,8 @@
machines += src
START_PROCESSING(SSmachine, src)
update_icon()
+ if(!physical)
+ physical = src
..()
/obj/item/modular_computer/Destroy()
@@ -172,11 +175,13 @@
return 0
// Operates NanoUI
-/obj/item/modular_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state)
-// if(!screen_on || !enabled)
-// if(ui)
-// ui.close()
-// return 0
+/obj/item/modular_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+
+
+ if(!screen_on || !enabled)
+ if(ui)
+ ui.close()
+ return 0
// if((!battery_module || !battery_module.battery.charge) && !check_power_override())
// if(ui)
// ui.close()
@@ -192,7 +197,7 @@
// We are still here, that means there is no program loaded. Load the BIOS/ROM/OS/whatever you want to call it.
// This screen simply lists available programs and user may select them.
if(!hard_drive || !hard_drive.stored_files || !hard_drive.stored_files.len)
- visible_message("\The [src] beeps three times, it's screen displaying \"DISK ERROR\" warning.")
+ physical.visible_message("\The [src] beeps three times, it's screen displaying \"DISK ERROR\" warning.")
return // No HDD, No HDD files list or no stored files. Something is very broken.
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
@@ -214,8 +219,11 @@
data["programs"] = list()
// var/list/programs = list()
for(var/datum/computer_file/program/P in hard_drive.stored_files)
+ var/running = 0
+ if(P in idle_threads)
+ running = 1
- data["programs"] += list(list("name" = P.filename, "desc" = P.filedesc))
+ data["programs"] += list(list("name" = P.filename, "desc" = P.filedesc, "running" = running))
// var/list/program = list()
@@ -235,7 +243,7 @@
turn_on(user)
/obj/item/modular_computer/proc/break_apart()
- visible_message("\The [src] breaks apart!")
+ physical.visible_message("\The [src] breaks apart!")
var/turf/newloc = get_turf(src)
new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2))
for(var/obj/item/weapon/computer_hardware/H in get_all_components())
@@ -383,7 +391,7 @@
P.kill_program(1)
idle_threads.Remove(P)
if(loud)
- visible_message("\The [src] shuts down.")
+ physical.visible_message("\The [src] shuts down.")
enabled = 0
update_icon()
return
@@ -467,7 +475,7 @@
// Used in following function to reduce copypaste
/obj/item/modular_computer/proc/power_failure(var/malfunction = 0)
if(enabled) // Shut down the computer
- visible_message("\The [src]'s screen flickers \"BATTERY [malfunction ? "MALFUNCTION" : "CRITICAL"]\" warning as it shuts down unexpectedly.")
+ physical.visible_message("\The [src]'s screen flickers \"BATTERY [malfunction ? "MALFUNCTION" : "CRITICAL"]\" warning as it shuts down unexpectedly.")
if(active_program)
active_program.event_powerfailure(0)
for(var/datum/computer_file/program/PRG in idle_threads)
@@ -527,7 +535,7 @@
user << "Remove all components from \the [src] before disassembling it."
return
new /obj/item/stack/sheet/metal( get_turf(src.loc), steel_sheet_cost )
- src.visible_message("\The [src] has been disassembled by [user].")
+ physical.visible_message("\The [src] has been disassembled by [user].")
relay_qdel()
qdel(src)
return
@@ -670,8 +678,6 @@
// Checks all hardware pieces to determine if name matches, if yes, returns the hardware piece, otherwise returns null
/obj/item/modular_computer/proc/find_hardware_by_name(var/name)
- world <<"ran"
- world << name
if(portable_drive && (portable_drive.name == name))
return portable_drive
if(hard_drive && (hard_drive.name == name))
@@ -790,4 +796,10 @@
//if(HALLOSS)
// take_damage(Proj.damage, Proj.damage / 3, 0)
if(BURN)
- take_damage(Proj.damage, Proj.damage / 1.5)
\ No newline at end of file
+ take_damage(Proj.damage, Proj.damage / 1.5)
+
+/obj/item/modular_computer/ui_host()
+ if(physical)
+ return physical
+ else
+ return src
\ No newline at end of file
diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm
index 649e20e57ea..d03c25cca12 100644
--- a/code/modules/modular_computers/computers/item/tablet.dm
+++ b/code/modules/modular_computers/computers/item/tablet.dm
@@ -7,5 +7,4 @@
hardware_flag = PROGRAM_TABLET
max_hardware_size = 1
w_class = 2
- light_strength = 2 // Same as PDAs
- var/use_power = 1
\ No newline at end of file
+ var/use_power = 0
\ No newline at end of file
diff --git a/code/modules/modular_computers/computers/machinery/console_presets.dm b/code/modules/modular_computers/computers/machinery/console_presets.dm
index 155e121c00b..26410e6794c 100644
--- a/code/modules/modular_computers/computers/machinery/console_presets.dm
+++ b/code/modules/modular_computers/computers/machinery/console_presets.dm
@@ -21,7 +21,6 @@
/obj/machinery/modular_computer/console/preset/proc/install_programs()
return
-/*
// ===== ENGINEERING CONSOLE =====
/obj/machinery/modular_computer/console/preset/engineering
@@ -31,18 +30,6 @@
/obj/machinery/modular_computer/console/preset/engineering/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/power_monitor())
cpu.hard_drive.store_file(new/datum/computer_file/program/alarm_monitor())
- cpu.hard_drive.store_file(new/datum/computer_file/program/atmos_control())
- cpu.hard_drive.store_file(new/datum/computer_file/program/rcon_console())
-
-
-// ===== MEDICAL CONSOLE =====
-/obj/machinery/modular_computer/console/preset/medical
- console_department = "Medical"
- desc = "A stationary computer. This one comes preloaded with medical programs."
-
-/obj/machinery/modular_computer/console/preset/medical/install_programs()
- cpu.hard_drive.store_file(new/datum/computer_file/program/suit_sensors())
-
// ===== RESEARCH CONSOLE =====
/obj/machinery/modular_computer/console/preset/research
@@ -54,34 +41,6 @@
cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer())
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
-
-// ===== COMMAND CONSOLE =====
-/obj/machinery/modular_computer/console/preset/command
- console_department = "Command"
- desc = "A stationary computer. This one comes preloaded with command programs."
- _has_id_slot = 1
- _has_printer = 1
-
-/obj/machinery/modular_computer/console/preset/command/install_programs()
- cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
- cpu.hard_drive.store_file(new/datum/computer_file/program/card_mod())
- cpu.hard_drive.store_file(new/datum/computer_file/program/comm())
-
-/obj/machinery/modular_computer/console/preset/command/main
- console_department = "Command"
- desc = "A stationary computer. This one comes preloaded with essential command programs."
- _has_id_slot = 1
- _has_printer = 1
-
-// ===== SECURITY CONSOLE =====
-/obj/machinery/modular_computer/console/preset/security
- console_department = "Security"
- desc = "A stationary computer. This one comes preloaded with security programs."
-
-/obj/machinery/modular_computer/console/preset/security/install_programs()
- return // No security programs exist, yet, but the preset is ready so it may be mapped in.
-
-
// ===== CIVILIAN CONSOLE =====
/obj/machinery/modular_computer/console/preset/civilian
console_department = "Civilian"
@@ -90,5 +49,4 @@
/obj/machinery/modular_computer/console/preset/civilian/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer())
- cpu.hard_drive.store_file(new/datum/computer_file/program/newsbrowser())
-*/
\ No newline at end of file
+
diff --git a/code/modules/modular_computers/computers/machinery/modular_computer.dm b/code/modules/modular_computers/computers/machinery/modular_computer.dm
index 72e9f056e69..e7ce0500c14 100644
--- a/code/modules/modular_computers/computers/machinery/modular_computer.dm
+++ b/code/modules/modular_computers/computers/machinery/modular_computer.dm
@@ -38,9 +38,8 @@ var/list/global_modular_computers = list()
if(cpu)
cpu.attack_ghost(user)
-/obj/machinery/modular_computer/emag_act(remaining_charges, mob/user)
-// return cpu ? cpu.emag_act(remaining_charges, user) : NO_EMAG_ACT
- return 1
+/obj/machinery/modular_computer/emag_act(mob/user)
+ return cpu ? cpu.emag_act(user) : 1
/obj/machinery/modular_computer/update_icon()
icon_state = icon_state_unpowered
@@ -78,6 +77,7 @@ var/list/global_modular_computers = list()
/obj/machinery/modular_computer/New()
..()
cpu = new(src)
+ cpu.physical = src
global_modular_computers.Add(src)
/obj/machinery/modular_computer/Destroy()
diff --git a/code/modules/modular_computers/file_system/news_article.dm b/code/modules/modular_computers/file_system/news_article.dm
deleted file mode 100644
index 2af9be7c20b..00000000000
--- a/code/modules/modular_computers/file_system/news_article.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-// /data/ files store data in string format.
-// They don't contain other logic for now.
-/datum/computer_file/data/news_article
- filetype = "XNML"
- filename = "Unknown News Entry"
- block_size = 1000 // Results in smaller files
- do_not_edit = 1 // Editing the file breaks most formatting due to some HTML tags not being accepted as input from average user.
- var/server_file_path // File path to HTML file that will be loaded on server start. Example: '/news_articles/space_magazine_1.html'. Use the /news_articles/ folder!
-
-/datum/computer_file/data/news_article/New(var/load_from_file = 0)
- ..()
- if(server_file_path && load_from_file)
- stored_data = file2text(server_file_path)
- calculate_size()
-
-
-// NEWS DEFINITIONS BELOW THIS LINE
-
-/datum/computer_file/data/news_article/space/vol_one
- filename = "SPACE Magazine vol. 1"
- server_file_path = 'news_articles/space_magazine_1.html'
-
-/datum/computer_file/data/news_article/space/vol_two
- filename = "SPACE Magazine vol. 2"
- server_file_path = 'news_articles/space_magazine_2.html'
-
-/datum/computer_file/data/news_article/space/vol_three
- filename = "SPACE Magazine vol. 3"
- server_file_path = 'news_articles/space_magazine_3.html'
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm
index 975f3ee2f49..66cd8f91f4d 100644
--- a/code/modules/modular_computers/file_system/program.dm
+++ b/code/modules/modular_computers/file_system/program.dm
@@ -29,9 +29,6 @@
computer = null
. = ..()
-//datum/computer_file/program/nano_host()
-// return computer.nano_host()
-
/datum/computer_file/program/clone()
var/datum/computer_file/program/temp = ..()
temp.required_access = required_access
@@ -79,19 +76,19 @@
access_to_check = required_access
if(!access_to_check) // No required_access, allow it.
return 1
- return 1
-/*
- var/obj/item/weapon/card/id/I = user.GetIdCard()
+
+
+ var/obj/item/weapon/card/id/I = user.GetID()
if(!I)
if(loud)
user << "\The [computer] flashes an \"RFID Error - Unable to scan ID\" warning."
return 0
- if(access_to_check in I.access)
+ if(access_to_check in I.GetAccess)
return 1
else if(loud)
user << "\The [computer] flashes an \"Access Denied\" warning."
-*/
+
// This attempts to retrieve header data for NanoUIs. If implementing completely new device of different type than existing ones
// always include the device here in this proc. This proc basically relays the request to whatever is running the program.
/datum/computer_file/program/proc/get_header_data()
@@ -103,8 +100,6 @@
// When implementing new program based device, use this to run the program.
/datum/computer_file/program/proc/run_program(mob/living/user)
if(can_run(user, 1))
- if(nanomodule_path)
- NM = new nanomodule_path(src, new /datum/topic_manager/program(src), src)
if(requires_ntnet && network_destination)
generate_network_log("Connection opened to [network_destination].")
program_state = PROGRAM_STATE_ACTIVE
@@ -116,19 +111,12 @@
program_state = PROGRAM_STATE_KILLED
if(network_destination)
generate_network_log("Connection to [network_destination] closed.")
- if(NM)
- qdel(NM)
- NM = null
return 1
// This is called every tick when the program is enabled. Ensure you do parent call if you override it. If parent returns 1 continue with UI initialisation.
// It returns 0 if it can't run or if NanoModule was used instead. I suggest using NanoModules where applicable.
-/datum/computer_file/program/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 1, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+/datum/computer_file/program/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists.
- if(!ui)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
- if(ui)
- ui.close()
return computer.ui_interact(user)
return 1
@@ -138,16 +126,18 @@
// Calls beginning with "PRG_" are reserved for programs handling.
// Calls beginning with "PC_" are reserved for computer handling (by whatever runs the program)
// ALWAYS INCLUDE PARENT CALL ..() OR DIE IN FIRE.
-/datum/computer_file/program/ui_act(action,params)
+/datum/computer_file/program/ui_act(action,params,datum/tgui/ui)
if(..())
return 1
if(computer)
switch(action)
if("PC_exit")
computer.kill_program()
+ ui.close()
return 1
if("PC_shutdown")
computer.shutdown_computer()
+ ui.close()
return 1
if("PC_minimize")
var/mob/user = usr
@@ -159,11 +149,19 @@
computer.active_program = null
computer.update_icon()
+ ui.close()
+
if(user && istype(user))
computer.ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
+/datum/computer_file/program/ui_host()
+ if(computer.physical)
+ return computer.physical
+ else
+ return computer
-
- //if(computer)
- // return computer.ui_act(action,params)
+/datum/computer_file/program/ui_status(mob/user)
+ if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists.
+ return UI_CLOSE
+ return ..()
diff --git a/code/modules/modular_computers/file_system/programs/_engineering.dm b/code/modules/modular_computers/file_system/programs/_engineering.dm
deleted file mode 100644
index 71bc0d475b3..00000000000
--- a/code/modules/modular_computers/file_system/programs/_engineering.dm
+++ /dev/null
@@ -1,85 +0,0 @@
-// These programs are associated with engineering.
-
-/datum/computer_file/program/power_monitor
- filename = "powermonitor"
- filedesc = "Power Monitoring"
- nanomodule_path = /datum/nano_module/power_monitor/
- program_icon_state = "power_monitor"
- extended_desc = "This program connects to sensors around the station to provide information about electrical systems"
- ui_header = "power_norm.gif"
- required_access = access_engine
- requires_ntnet = 1
- network_destination = "power monitoring system"
- size = 9
- var/has_alert = 0
-
-/datum/computer_file/program/power_monitor/process_tick()
- ..()
- var/datum/nano_module/power_monitor/NMA = NM
- if(istype(NMA) && NMA.has_alarm())
- if(!has_alert)
- program_icon_state = "power_monitor_warn"
- ui_header = "power_warn.gif"
- update_computer_icon()
- has_alert = 1
- else
- if(has_alert)
- program_icon_state = "power_monitor"
- ui_header = "power_norm.gif"
- update_computer_icon()
- has_alert = 0
-
-/datum/computer_file/program/alarm_monitor
- filename = "alarmmonitor"
- filedesc = "Alarm Monitoring"
- nanomodule_path = /datum/nano_module/alarm_monitor/engineering
- ui_header = "alarm_green.gif"
- program_icon_state = "alert-green"
- extended_desc = "This program provides visual interface for station's alarm system."
- requires_ntnet = 1
- network_destination = "alarm monitoring network"
- size = 5
- var/has_alert = 0
-
-/datum/computer_file/program/alarm_monitor/process_tick()
- ..()
- var/datum/nano_module/alarm_monitor/NMA = NM
- if(istype(NMA) && NMA.has_major_alarms())
- if(!has_alert)
- program_icon_state = "alert-red"
- ui_header = "alarm_red.gif"
- update_computer_icon()
- has_alert = 1
- else
- if(has_alert)
- program_icon_state = "alert-green"
- ui_header = "alarm_green.gif"
- update_computer_icon()
- has_alert = 0
- return 1
-
-/datum/computer_file/program/atmos_control
- filename = "atmoscontrol"
- filedesc = "Atmosphere Control"
- nanomodule_path = /datum/nano_module/atmos_control
- program_icon_state = "atmos_control"
- extended_desc = "This program allows remote control of air alarms around the station. This program can not be run on tablet computers."
- required_access = access_atmospherics
- requires_ntnet = 1
- network_destination = "atmospheric control system"
- requires_ntnet_feature = NTNET_SYSTEMCONTROL
- usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE
- size = 17
-
-/datum/computer_file/program/rcon_console
- filename = "rconconsole"
- filedesc = "RCON Remote Control"
- nanomodule_path = /datum/nano_module/rcon
- program_icon_state = "generic"
- extended_desc = "This program allows remote control of power distribution systems around the station. This program can not be run on tablet computers."
- required_access = access_engine
- requires_ntnet = 1
- network_destination = "RCON remote control system"
- requires_ntnet_feature = NTNET_SYSTEMCONTROL
- usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE
- size = 19
diff --git a/code/modules/modular_computers/file_system/programs/_medical.dm b/code/modules/modular_computers/file_system/programs/_medical.dm
deleted file mode 100644
index 4099d156bbb..00000000000
--- a/code/modules/modular_computers/file_system/programs/_medical.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/datum/computer_file/program/suit_sensors
- filename = "sensormonitor"
- filedesc = "Suit Sensors Monitoring"
- nanomodule_path = /datum/nano_module/crew_monitor
- program_icon_state = "crew"
- extended_desc = "This program connects to life signs monitoring system to provide basic information on crew health."
- required_access = access_medical
- requires_ntnet = 1
- network_destination = "crew lifesigns monitoring system"
- size = 11
diff --git a/code/modules/modular_computers/file_system/programs/_program.dm b/code/modules/modular_computers/file_system/programs/_program.dm
deleted file mode 100644
index 0039b8f5976..00000000000
--- a/code/modules/modular_computers/file_system/programs/_program.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-
-/obj/machinery/modular_computer/initial_data()
- return cpu ? cpu.get_header_data() : ..()
-
-/obj/item/modular_computer/initial_data()
- return get_header_data()
-
-/obj/machinery/modular_computer/update_layout()
- return TRUE
-
-/obj/item/modular_computer/update_layout()
- return TRUE
-
-*/
-
-/datum/nano_module/program
-// available_to_ai = FALSE
- var/datum/computer_file/program/program = null // Program-Based computer program that runs this nano module. Defaults to null.
-
-/datum/nano_module/program/New(host, topic_manager, program)
- ..()
- src.program = program
-
-/datum/topic_manager/program
- var/datum/program
-
-/datum/topic_manager/program/New(datum/program)
- ..()
- src.program = program
-
-// Calls forwarded to PROGRAM itself should begin with "PRG_"
-// Calls forwarded to COMPUTER running the program should begin with "PC_"
-/datum/topic_manager/program/Topic(href, href_list)
- return program && program.Topic(href, href_list)
diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm
new file mode 100644
index 00000000000..3a3c9d72e78
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/alarm.dm
@@ -0,0 +1,106 @@
+
+
+
+/datum/computer_file/program/alarm_monitor
+ filename = "alarmmonitor"
+ filedesc = "Alarm Monitoring"
+ ui_header = "alarm_green.gif"
+ program_icon_state = "alert-green"
+ extended_desc = "This program provides visual interface for station's alarm system."
+ requires_ntnet = 1
+ network_destination = "alarm monitoring network"
+ size = 5
+ var/has_alert = 0
+ var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list())
+
+/datum/computer_file/program/alarm_monitor/process_tick()
+ ..()
+
+ if(has_alert)
+ program_icon_state = "alert-red"
+ ui_header = "alarm_red.gif"
+ update_computer_icon()
+ else
+ if(!has_alert)
+ program_icon_state = "alert-green"
+ ui_header = "alarm_green.gif"
+ update_computer_icon()
+ return 1
+
+
+
+/datum/computer_file/program/alarm_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "station_alert_prog", "Alarm Monitoring", 300, 500, master_ui, state)
+ ui.open()
+
+/datum/computer_file/program/alarm_monitor/ui_data(mob/user)
+ var/list/data = get_header_data()
+
+ data["alarms"] = list()
+ for(var/class in alarms)
+ data["alarms"][class] = list()
+ for(var/area in alarms[class])
+ data["alarms"][class] += area
+
+ return data
+
+/datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source)
+
+ var/list/L = alarms[class]
+ for(var/I in L)
+ if (I == A.name)
+ var/list/alarm = L[I]
+ var/list/sources = alarm[3]
+ if (!(source in sources))
+ sources += source
+ return 1
+ var/obj/machinery/camera/C = null
+ var/list/CL = null
+ if(O && istype(O, /list))
+ CL = O
+ if (CL.len == 1)
+ C = CL[1]
+ else if(O && istype(O, /obj/machinery/camera))
+ C = O
+ L[A.name] = list(A, (C ? C : O), list(source))
+
+ update_alarm_display()
+
+ return 1
+
+
+/datum/computer_file/program/alarm_monitor/proc/cancelAlarm(class, area/A, obj/origin)
+
+
+ var/list/L = alarms[class]
+ var/cleared = 0
+ for (var/I in L)
+ if (I == A.name)
+ var/list/alarm = L[I]
+ var/list/srcs = alarm[3]
+ if (origin in srcs)
+ srcs -= origin
+ if (srcs.len == 0)
+ cleared = 1
+ L -= I
+
+ update_alarm_display()
+ return !cleared
+
+/datum/computer_file/program/alarm_monitor/proc/update_alarm_display()
+ has_alert = FALSE
+ for(var/cat in alarms)
+ var/list/L = alarms[cat]
+ if(L.len)
+ has_alert = TRUE
+
+/datum/computer_file/program/alarm_monitor/run_program(mob/user)
+ . = ..(user)
+ alarmdisplay += src
+
+/datum/computer_file/program/alarm_monitor/kill_program(forced = 0)
+ alarmdisplay -= src
+ ..(forced)
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm
index 4d82967d342..306b1495cc3 100644
--- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm
+++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm
@@ -29,14 +29,15 @@
error = "Connection to destination relay lost."
/datum/computer_file/program/ntnet_dos/kill_program(var/forced)
- target.dos_sources.Remove(src)
+ if(target)
+ target.dos_sources.Remove(src)
target = null
executed = 0
..(forced)
-/datum/computer_file/program/ntnet_dos/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state)
+/datum/computer_file/program/ntnet_dos/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
@@ -50,10 +51,11 @@
/datum/computer_file/program/ntnet_dos/ui_act(action, params)
if(..())
return 1
+ world << params
switch(action)
if("PRG_target_relay")
for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays)
- if("[R.uid]" == params)
+ if("[R.uid]" == params["targid"])
target = R
return 1
if("PRG_reset")
@@ -90,18 +92,16 @@
// Probability of 1 is equal of completion percentage of DoS attack on this relay.
// Combined with UI updates this adds quite nice effect to the UI
var/percentage = target.dos_overload * 100 / target.dos_capacity
- var/list/strings[0]
+ data["dos_strings"] = list()
for(var/j, j<10, j++)
var/string = ""
for(var/i, i<20, i++)
string = "[string][prob(percentage)]"
- strings.Add(string)
- data["dos_strings"] = strings
+ data["dos_strings"] += list(list("nums" = string))
else
- var/list/relays[0]
+ data["relays"] = list()
for(var/obj/machinery/ntnet_relay/R in ntnet_global.relays)
- relays.Add(R.uid)
- data["relays"] = relays
+ data["relays"] += list(list("id" = R.uid))
data["focus"] = target ? target.uid : null
return data
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm
index 87ce4de9cc4..6549c4d02f5 100644
--- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm
+++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm
@@ -7,7 +7,6 @@
requires_ntnet = 0
available_on_ntnet = 0
available_on_syndinet = 1
- nanomodule_path = /datum/nano_module/program/revelation/
var/armed = 0
/datum/computer_file/program/revelation/run_program(var/mob/living/user)
@@ -24,56 +23,50 @@
if(computer.battery_module && prob(25))
qdel(computer.battery_module)
computer.visible_message("\The [computer]'s battery explodes in rain of sparks.")
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(10, 1, computer.loc)
- s.start()
+ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
+ spark_system.start()
if(istype(computer, /obj/item/modular_computer/processor))
var/obj/item/modular_computer/processor/P = computer
if(P.machinery_computer.tesla_link && prob(50))
qdel(P.machinery_computer.tesla_link)
computer.visible_message("\The [computer]'s tesla link explodes in rain of sparks.")
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(10, 1, computer.loc)
- s.start()
+ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
+ spark_system.start()
-/datum/computer_file/program/revelation/Topic(href, href_list)
+/datum/computer_file/program/revelation/ui_act(action, params)
if(..())
return 1
- else if(href_list["PRG_arm"])
- armed = !armed
- else if(href_list["PRG_activate"])
- activate()
- else if(href_list["PRG_obfuscate"])
- var/mob/living/user = usr
- var/newname = sanitize(input(user, "Enter new program name: "))
- if(!newname)
- return
- filedesc = newname
- return 1
+ switch(action)
+ if("PRG_arm")
+ armed = !armed
+ if("PRG_activate")
+ activate()
+ if("PRG_obfuscate")
+ var/mob/living/user = usr
+ var/newname = sanitize(input(user, "Enter new program name: "))
+ if(!newname)
+ return
+ filedesc = newname
+
/datum/computer_file/program/revelation/clone()
var/datum/computer_file/program/revelation/temp = ..()
temp.armed = armed
return temp
-/datum/nano_module/program/revelation
- name = "Revelation Virus"
+/datum/computer_file/program/revelation/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
-/datum/nano_module/program/revelation/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
- var/list/data = list()
- var/datum/computer_file/program/revelation/PRG = program
- if(!istype(PRG))
- return
-
- data = PRG.get_header_data()
-
- data["armed"] = PRG.armed
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
- ui = new(user, src, ui_key, "revelation.tmpl", "Revelation Virus", 400, 250, state = state)
- ui.auto_update_layout = 1
- ui.set_initial_data(data)
+ ui = new(user, src, ui_key, "revelation", "Revelation Virus", 400, 250, state = state)
+ ui.set_style("syndicate")
+ ui.set_autoupdate(state = 1)
ui.open()
- ui.set_auto_update(1)
+
+/datum/computer_file/program/revelation/ui_data(mob/user)
+ var/list/data = get_header_data()
+
+ data["armed"] = armed
+
+ return data
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/comm.dm b/code/modules/modular_computers/file_system/programs/comm.dm
deleted file mode 100644
index 736b87a1665..00000000000
--- a/code/modules/modular_computers/file_system/programs/comm.dm
+++ /dev/null
@@ -1,417 +0,0 @@
-#define STATE_DEFAULT 1
-#define STATE_MESSAGELIST 2
-#define STATE_VIEWMESSAGE 3
-#define STATE_STATUSDISPLAY 4
-#define STATE_ALERT_LEVEL 5
-/datum/computer_file/program/comm
- filename = "comm"
- filedesc = "Command and communications program."
- program_icon_state = "comm"
- nanomodule_path = /datum/nano_module/program/comm
- extended_desc = "Used to command and control the station. Can relay long-range communications. This program can not be run on tablet computers."
- required_access = access_heads
- requires_ntnet = 1
- size = 12
- usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP
- network_destination = "station long-range communication array"
- var/datum/comm_message_listener/message_core = new
-
-/datum/computer_file/program/comm/clone()
- var/datum/computer_file/program/comm/temp = ..()
- temp.message_core.messages = null
- temp.message_core.messages = message_core.messages.Copy()
- return temp
-
-/datum/nano_module/program/comm
- name = "Command and communications program"
- available_to_ai = TRUE
- var/current_status = STATE_DEFAULT
- var/msg_line1 = ""
- var/msg_line2 = ""
- var/centcomm_message_cooldown = 0
- var/announcment_cooldown = 0
- var/datum/announcement/priority/crew_announcement = new
- var/current_viewing_message_id = 0
- var/current_viewing_message = null
-
-/datum/nano_module/program/comm/New()
- ..()
- crew_announcement.newscast = 1
-
-/datum/nano_module/program/comm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
- var/list/data = host.initial_data()
-
- if(program)
- data["emagged"] = program.computer_emagged
- data["net_comms"] = !!program.get_signal(NTNET_COMMUNICATION) //Double !! is needed to get 1 or 0 answer
- data["net_syscont"] = !!program.get_signal(NTNET_SYSTEMCONTROL)
- if(program.computer)
- data["have_printer"] = !!program.computer.nano_printer
- else
- data["have_printer"] = 0
- else
- data["emagged"] = 0
- data["net_comms"] = 1
- data["net_syscont"] = 1
- data["have_printer"] = 0
-
- data["message_line1"] = msg_line1
- data["message_line2"] = msg_line2
- data["state"] = current_status
- data["isAI"] = issilicon(usr)
- data["authenticated"] = is_autenthicated(user)
- data["boss_short"] = boss_short
- data["current_security_level"] = security_level
- data["current_security_level_title"] = num2seclevel(security_level)
-
- data["def_SEC_LEVEL_DELTA"] = SEC_LEVEL_DELTA
- data["def_SEC_LEVEL_BLUE"] = SEC_LEVEL_BLUE
- data["def_SEC_LEVEL_GREEN"] = SEC_LEVEL_GREEN
-
- var/datum/comm_message_listener/l = obtain_message_listener()
- data["messages"] = l.messages
- data["message_deletion_allowed"] = l != global_message_listener
- data["message_current_id"] = current_viewing_message_id
- if(current_viewing_message)
- data["message_current"] = current_viewing_message
-
- if(emergency_shuttle.location())
- data["have_shuttle"] = 1
- if(emergency_shuttle.online())
- data["have_shuttle_called"] = 1
- else
- data["have_shuttle_called"] = 0
- else
- data["have_shuttle"] = 0
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "communication.tmpl", name, 550, 420, state = state)
- ui.auto_update_layout = 1
- ui.set_initial_data(data)
- ui.open()
-
-/datum/nano_module/program/comm/proc/is_autenthicated(var/mob/user)
- if(program)
- return program.can_run(user)
- return 1
-
-/datum/nano_module/program/comm/proc/obtain_message_listener()
- if(program)
- var/datum/computer_file/program/comm/P = program
- return P.message_core
- return global_message_listener
-
-/datum/nano_module/program/comm/Topic(href, href_list)
- if(..())
- return 1
- var/mob/user = usr
- var/ntn_comm = program ? !!program.get_signal(NTNET_COMMUNICATION) : 1
- var/ntn_cont = program ? !!program.get_signal(NTNET_SYSTEMCONTROL) : 1
- var/datum/comm_message_listener/l = obtain_message_listener()
- switch(href_list["action"])
- if("sw_menu")
- . = 1
- current_status = text2num(href_list["target"])
- if("announce")
- . = 1
- if(is_autenthicated(user) && !issilicon(usr) && ntn_comm)
- if(user)
- var/obj/item/weapon/card/id/id_card = user.GetIdCard()
- crew_announcement.announcer = GetNameAndAssignmentFromId(id_card)
- else
- crew_announcement.announcer = "Unknown"
- if(announcment_cooldown)
- usr << "Please allow at least one minute to pass between announcements"
- return TRUE
- var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement") as null|text
- if(!input || !can_still_topic())
- return 1
- crew_announcement.Announce(input)
- announcment_cooldown = 1
- spawn(600)//One minute cooldown
- announcment_cooldown = 0
- if("message")
- . = 1
- if(href_list["target"] == "emagged")
- if(program)
- if(is_autenthicated(user) && program.computer_emagged && !issilicon(usr) && ntn_comm)
- if(centcomm_message_cooldown)
- usr << "Arrays recycling. Please stand by."
- nanomanager.update_uis(src)
- return
- var/input = sanitize(input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") as null|text)
- if(!input || !can_still_topic())
- return 1
- Syndicate_announce(input, usr)
- usr << "Message transmitted."
- log_say("[key_name(usr)] has made an illegal announcement: [input]")
- centcomm_message_cooldown = 1
- spawn(300)//30 second cooldown
- centcomm_message_cooldown = 0
- else if(href_list["target"] == "regular")
- if(is_autenthicated(user) && !issilicon(usr) && ntn_comm)
- if(centcomm_message_cooldown)
- usr << "Arrays recycling. Please stand by."
- nanomanager.update_uis(src)
- return
- if(!is_relay_online())//Contact Centcom has a check, Syndie doesn't to allow for Traitor funs.
- usr <<"No Emergency Bluespace Relay detected. Unable to transmit message."
- return 1
- var/input = sanitize(input("Please choose a message to transmit to [boss_short] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") as null|text)
- if(!input || !can_still_topic())
- return 1
- Centcomm_announce(input, usr)
- usr << "Message transmitted."
- log_say("[key_name(usr)] has made an IA [boss_short] announcement: [input]")
- centcomm_message_cooldown = 1
- spawn(300) //30 second cooldown
- centcomm_message_cooldown = 0
- if("shuttle")
- . = 1
- if(is_autenthicated(user) && ntn_cont)
- if(href_list["target"] == "call")
- var/confirm = alert("Are you sure you want to call the shuttle?", name, "No", "Yes")
- if(confirm == "Yes" && can_still_topic())
- call_shuttle_proc(usr)
- if(href_list["target"] == "cancel" && !issilicon(usr))
- var/confirm = alert("Are you sure you want to cancel the shuttle?", name, "No", "Yes")
- if(confirm == "Yes" && can_still_topic())
- cancel_call_proc(usr)
- if("setstatus")
- . = 1
- if(is_autenthicated(user) && ntn_cont)
- switch(href_list["target"])
- if("line1")
- var/linput = reject_bad_text(sanitize(input("Line 1", "Enter Message Text", msg_line1) as text|null, 40), 40)
- if(can_still_topic())
- msg_line1 = linput
- if("line2")
- var/linput = reject_bad_text(sanitize(input("Line 2", "Enter Message Text", msg_line2) as text|null, 40), 40)
- if(can_still_topic())
- msg_line2 = linput
- if("message")
- post_status("message", msg_line1, msg_line2)
- if("alert")
- post_status("alert", href_list["alert"])
- else
- post_status(href_list["target"])
- if("setalert")
- . = 1
- if(is_autenthicated(user) && !issilicon(usr) && ntn_cont && ntn_comm)
- var/current_level = text2num(href_list["target"])
- var/confirm = alert("Are you sure you want to change alert level to [num2seclevel(current_level)]?", name, "No", "Yes")
- if(confirm == "Yes" && can_still_topic())
- var/old_level = security_level
- if(!current_level) current_level = SEC_LEVEL_GREEN
- if(current_level < SEC_LEVEL_GREEN) current_level = SEC_LEVEL_GREEN
- if(current_level > SEC_LEVEL_BLUE) current_level = SEC_LEVEL_BLUE //Cannot engage delta with this
- set_security_level(current_level)
- if(security_level != old_level)
- log_game("[key_name(usr)] has changed the security level to [get_security_level()].")
- message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].")
- switch(security_level)
- if(SEC_LEVEL_GREEN)
- feedback_inc("alert_comms_green",1)
- if(SEC_LEVEL_BLUE)
- feedback_inc("alert_comms_blue",1)
- else
- usr << "You press button, but red light flashes and nothing happens." //This should never happen
- current_status = STATE_DEFAULT
- if("viewmessage")
- . = 1
- if(is_autenthicated(user) && ntn_comm)
- current_viewing_message_id = text2num(href_list["target"])
- for(var/list/m in l.messages)
- if(m["id"] == current_viewing_message_id)
- current_viewing_message = m
- current_status = STATE_VIEWMESSAGE
- if("delmessage")
- . = 1
- if(is_autenthicated(user) && ntn_comm && l != global_message_listener)
- l.Remove(current_viewing_message)
- current_status = STATE_MESSAGELIST
- if("printmessage")
- . = 1
- if(is_autenthicated(user) && ntn_comm)
- if(program && program.computer && program.computer.nano_printer)
- if(!program.computer.nano_printer.print_text(current_viewing_message["contents"],current_viewing_message["title"]))
- usr << "Hardware error: Printer was unable to print the file. It may be out of paper."
- else
- program.computer.visible_message("\The [program.computer] prints out paper.")
-
-#undef STATE_DEFAULT
-#undef STATE_MESSAGELIST
-#undef STATE_VIEWMESSAGE
-#undef STATE_STATUSDISPLAY
-#undef STATE_ALERT_LEVEL
-
-/*
-General message handling stuff
-*/
-var/list/comm_message_listeners = list() //We first have to initialize list then we can use it.
-var/datum/comm_message_listener/global_message_listener = new //May be used by admins
-var/last_message_id = 0
-
-/proc/get_comm_message_id()
- last_message_id = last_message_id + 1
- return last_message_id
-
-/proc/post_comm_message(var/message_title, var/message_text)
- var/list/message = list()
- message["id"] = get_comm_message_id()
- message["title"] = message_title
- message["contents"] = message_text
-
- for (var/datum/comm_message_listener/l in comm_message_listeners)
- l.Add(message)
-
- for (var/obj/machinery/modular_computer/console/preset/command/main/computer in global_modular_computers)
- if(!(computer.stat & (BROKEN | NOPOWER)) && computer.cpu)
- if(computer.cpu.hard_drive)
- var/datum/computer_file/program/comm/C = locate(/datum/computer_file/program/comm) in computer.cpu.hard_drive.stored_files
- if(C)
- var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper(computer.loc)
- intercept.name = message_title
- intercept.info = message_text
-
-/datum/comm_message_listener
- var/list/messages
-
-/datum/comm_message_listener/New()
- ..()
- messages = list()
- comm_message_listeners.Add(src)
-
-/datum/comm_message_listener/proc/Add(var/list/message)
- messages[++messages.len] = message
-
-/datum/comm_message_listener/proc/Remove(var/list/message)
- messages -= list(message)
-
-/proc/post_status(var/command, var/data1, var/data2)
-
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
-
- if(!frequency) return
-
-
- var/datum/signal/status_signal = new
- status_signal.source = src
- status_signal.transmission_method = 1
- status_signal.data["command"] = command
-
- switch(command)
- if("message")
- status_signal.data["msg1"] = data1
- status_signal.data["msg2"] = data2
- log_admin("STATUS: [key_name(usr)] set status screen message with [src]: [data1] [data2]")
- if("alert")
- status_signal.data["picture_state"] = data1
-
- frequency.post_signal(src, status_signal)
-
-/proc/cancel_call_proc(var/mob/user)
- if (!( ticker ) || !emergency_shuttle.can_recall())
- return
- if((ticker.mode.name == "blob")||(ticker.mode.name == "Meteor"))
- return
-
- if(!emergency_shuttle.going_to_centcom()) //check that shuttle isn't already heading to centcomm
- emergency_shuttle.recall()
- log_game("[key_name(user)] has recalled the shuttle.")
- message_admins("[key_name_admin(user)] has recalled the shuttle.", 1)
- return
-
-
-/proc/is_relay_online()
- for(var/obj/machinery/bluespacerelay/M in machines)
- if(M.stat == 0)
- return 1
- return 0
-
-/proc/enable_prison_shuttle(var/mob/user)
- for(var/obj/machinery/computer/prison_shuttle/PS in machines)
- PS.allowedtocall = !(PS.allowedtocall)
-
-/proc/call_shuttle_proc(var/mob/user)
- if ((!( ticker ) || !emergency_shuttle.location()))
- return
-
- if(!universe.OnShuttleCall(usr))
- user << "Cannot establish a bluespace connection."
- return
-
- if(deathsquad.deployed)
- user << "[boss_short] will not allow the shuttle to be called. Consider all contracts terminated."
- return
-
- if(emergency_shuttle.deny_shuttle)
- user << "The emergency shuttle may not be sent at this time. Please try again later."
- return
-
- if(world.time < 6000) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE
- user << "The emergency shuttle is refueling. Please wait another [round((6000-world.time)/600)] minute\s before trying again."
- return
-
- if(emergency_shuttle.going_to_centcom())
- user << "The emergency shuttle may not be called while returning to [boss_short]."
- return
-
- if(emergency_shuttle.online())
- user << "The emergency shuttle is already on its way."
- return
-
- if(ticker.mode.name == "blob" || ticker.mode.name == "epidemic")
- user << "Under directive 7-10, [station_name()] is quarantined until further notice."
- return
-
- if(!emergency_shuttle.call_evac(user))
- return
- log_and_message_admins("has called the shuttle.")
-
-/proc/init_shift_change(var/mob/user, var/force = 0)
- if ((!( ticker ) || !emergency_shuttle.location()))
- return
-
- if(emergency_shuttle.going_to_centcom())
- user << "The shuttle may not be called while returning to [boss_short]."
- return
-
- if(emergency_shuttle.online())
- user << "The shuttle is already on its way."
- return
-
- // if force is 0, some things may stop the shuttle call
- if(!force)
- if(emergency_shuttle.deny_shuttle)
- user << "[boss_short] does not currently have a shuttle available in your sector. Please try again later."
- return
-
- if(deathsquad.deployed == 1)
- user << "[boss_short] will not allow the shuttle to be called. Consider all contracts terminated."
- return
-
- if(world.time < 54000) // 30 minute grace period to let the game get going
- user << "The shuttle is refueling. Please wait another [round((54000-world.time)/60)] minutes before trying again."
- return
-
- if(ticker.mode.auto_recall_shuttle)
- //New version pretends to call the shuttle but cause the shuttle to return after a random duration.
- emergency_shuttle.auto_recall = 1
-
- if(ticker.mode.name == "blob" || ticker.mode.name == "epidemic")
- user << "Under directive 7-10, [station_name()] is quarantined until further notice."
- return
-
- emergency_shuttle.call_transfer()
-
- //delay events in case of an autotransfer
- if (isnull(user))
- event_manager.delay_events(EVENT_LEVEL_MODERATE, 10200) //17 minutes
- event_manager.delay_events(EVENT_LEVEL_MAJOR, 10200)
-
- log_game("[user? key_name(user) : "Autotransfer"] has called the shuttle.")
- message_admins("[user? key_name_admin(user) : "Autotransfer"] has called the shuttle.", 1)
-
- return
diff --git a/code/modules/modular_computers/file_system/programs/configurator.dm b/code/modules/modular_computers/file_system/programs/configurator.dm
index f72546c0385..7a148346986 100644
--- a/code/modules/modular_computers/file_system/programs/configurator.dm
+++ b/code/modules/modular_computers/file_system/programs/configurator.dm
@@ -17,7 +17,7 @@
//obj/machinery/vr_sleeper/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
-/datum/computer_file/program/computerconfig/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state)
+/datum/computer_file/program/computerconfig/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
@@ -38,7 +38,7 @@
var/list/data = list()
- data = program.get_header_data()
+ data = get_header_data()
var/list/hardware = movable.get_all_components()
diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm
index 26d8b81f755..2cb5a09aa98 100644
--- a/code/modules/modular_computers/file_system/programs/file_browser.dm
+++ b/code/modules/modular_computers/file_system/programs/file_browser.dm
@@ -7,139 +7,138 @@
requires_ntnet = 0
available_on_ntnet = 0
undeletable = 1
- nanomodule_path = /datum/nano_module/program/computer_filemanager/
var/open_file
var/error
-/datum/computer_file/program/filemanager/ui_act(href, href_list)
+/datum/computer_file/program/filemanager/ui_act(action, params)
if(..())
return 1
- if(href_list["PRG_openfile"])
- . = 1
- open_file = href_list["PRG_openfile"]
- if(href_list["PRG_newtextfile"])
- . = 1
- var/newname = sanitize(input(usr, "Enter file name or leave blank to cancel:", "File rename"))
- if(!newname)
- return 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/data/F = new/datum/computer_file/data()
- F.filename = newname
- F.filetype = "TXT"
- HDD.store_file(F)
- if(href_list["PRG_deletefile"])
- . = 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/file = HDD.find_file_by_name(href_list["PRG_deletefile"])
- if(!file || file.undeletable)
- return 1
- HDD.remove_file(file)
- if(href_list["PRG_usbdeletefile"])
- . = 1
- var/obj/item/weapon/computer_hardware/hard_drive/RHDD = computer.portable_drive
- if(!RHDD)
- return 1
- var/datum/computer_file/file = RHDD.find_file_by_name(href_list["PRG_usbdeletefile"])
- if(!file || file.undeletable)
- return 1
- RHDD.remove_file(file)
- if(href_list["PRG_closefile"])
- . = 1
- open_file = null
- error = null
- if(href_list["PRG_clone"])
- . = 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/F = HDD.find_file_by_name(href_list["PRG_clone"])
- if(!F || !istype(F))
- return 1
- var/datum/computer_file/C = F.clone(1)
- HDD.store_file(C)
- if(href_list["PRG_rename"])
- . = 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/file = HDD.find_file_by_name(href_list["PRG_rename"])
- if(!file || !istype(file))
- return 1
- var/newname = sanitize(input(usr, "Enter new file name:", "File rename", file.filename))
- if(file && newname)
- file.filename = newname
- if(href_list["PRG_edit"])
- . = 1
- if(!open_file)
- return 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/data/F = HDD.find_file_by_name(open_file)
- if(!F || !istype(F))
- return 1
- if(F.do_not_edit && (alert("WARNING: This file is not compatible with editor. Editing it may result in permanently corrupted formatting or damaged data consistency. Edit anyway?", "Incompatible File", "No", "Yes") == "No"))
- return 1
- // 16384 is the limit for file length in characters. Currently, papers have value of 2048 so this is 8 times as long, since we can't edit parts of the file independently.
- var/newtext = sanitize(html_decode(input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", F.stored_data) as message|null), 16384)
- if(!newtext)
- return
- if(F)
- var/datum/computer_file/data/backup = F.clone()
- HDD.remove_file(F)
- F.stored_data = newtext
- F.calculate_size()
- // We can't store the updated file, it's probably too large. Print an error and restore backed up version.
- // This is mostly intended to prevent people from losing texts they spent lot of time working on due to running out of space.
- // They will be able to copy-paste the text from error screen and store it in notepad or something.
- if(!HDD.store_file(F))
- error = "I/O error: Unable to overwrite file. Hard drive is probably full. You may want to backup your changes before closing this window:
[F.stored_data]
"
- HDD.store_file(backup)
- if(href_list["PRG_printfile"])
- . = 1
- if(!open_file)
- return 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/data/F = HDD.find_file_by_name(open_file)
- if(!F || !istype(F))
- return 1
- if(!computer.nano_printer)
- error = "Missing Hardware: Your computer does not have required hardware to complete this operation."
- return 1
- if(!computer.nano_printer.print_text(parse_tags(F.stored_data)))
- error = "Hardware error: Printer was unable to print the file. It may be out of paper."
- return 1
- if(href_list["PRG_copytousb"])
- . = 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- var/obj/item/weapon/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive
- if(!HDD || !RHDD)
- return 1
- var/datum/computer_file/F = HDD.find_file_by_name(href_list["PRG_copytousb"])
- if(!F || !istype(F))
- return 1
- var/datum/computer_file/C = F.clone(0)
- RHDD.store_file(C)
- if(href_list["PRG_copyfromusb"])
- . = 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- var/obj/item/weapon/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive
- if(!HDD || !RHDD)
- return 1
- var/datum/computer_file/F = RHDD.find_file_by_name(href_list["PRG_copyfromusb"])
- if(!F || !istype(F))
- return 1
- var/datum/computer_file/C = F.clone(0)
- HDD.store_file(C)
- if(.)
- nanomanager.update_uis(NM)
+ switch(action)
+ if("PRG_openfile")
+ . = 1
+ open_file = params["name"]
+ if("PRG_newtextfile")
+ . = 1
+ var/newname = sanitize(input(usr, "Enter file name or leave blank to cancel:", "File rename"))
+ if(!newname)
+ return 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ if(!HDD)
+ return 1
+ var/datum/computer_file/data/F = new/datum/computer_file/data()
+ F.filename = newname
+ F.filetype = "TXT"
+ HDD.store_file(F)
+ if("PRG_deletefile")
+ . = 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ if(!HDD)
+ return 1
+ var/datum/computer_file/file = HDD.find_file_by_name(params["name"])
+ if(!file || file.undeletable)
+ return 1
+ HDD.remove_file(file)
+ if("PRG_usbdeletefile")
+ . = 1
+ var/obj/item/weapon/computer_hardware/hard_drive/RHDD = computer.portable_drive
+ if(!RHDD)
+ return 1
+ var/datum/computer_file/file = RHDD.find_file_by_name(params["name"])
+ if(!file || file.undeletable)
+ return 1
+ RHDD.remove_file(file)
+ if("PRG_closefile")
+ . = 1
+ open_file = null
+ error = null
+ if("PRG_clone")
+ . = 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ if(!HDD)
+ return 1
+ var/datum/computer_file/F = HDD.find_file_by_name(params["name"])
+ if(!F || !istype(F))
+ return 1
+ var/datum/computer_file/C = F.clone(1)
+ HDD.store_file(C)
+ if("PRG_rename")
+ . = 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ if(!HDD)
+ return 1
+ var/datum/computer_file/file = HDD.find_file_by_name(params["name"])
+ if(!file || !istype(file))
+ return 1
+ var/newname = sanitize(input(usr, "Enter new file name:", "File rename", file.filename))
+ if(file && newname)
+ file.filename = newname
+ if("PRG_edit")
+ . = 1
+ if(!open_file)
+ return 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ if(!HDD)
+ return 1
+ var/datum/computer_file/data/F = HDD.find_file_by_name(open_file)
+ if(!F || !istype(F))
+ return 1
+ if(F.do_not_edit && (alert("WARNING: This file is not compatible with editor. Editing it may result in permanently corrupted formatting or damaged data consistency. Edit anyway?", "Incompatible File", "No", "Yes") == "No"))
+ return 1
+ // 16384 is the limit for file length in characters. Currently, papers have value of 2048 so this is 8 times as long, since we can't edit parts of the file independently.
+ var/newtext = sanitize(html_decode(input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", F.stored_data) as message|null), 16384)
+ if(!newtext)
+ return
+ if(F)
+ var/datum/computer_file/data/backup = F.clone()
+ HDD.remove_file(F)
+ F.stored_data = newtext
+ F.calculate_size()
+ // We can't store the updated file, it's probably too large. Print an error and restore backed up version.
+ // This is mostly intended to prevent people from losing texts they spent lot of time working on due to running out of space.
+ // They will be able to copy-paste the text from error screen and store it in notepad or something.
+ if(!HDD.store_file(F))
+ error = "I/O error: Unable to overwrite file. Hard drive is probably full. You may want to backup your changes before closing this window:
[F.stored_data]
"
+ HDD.store_file(backup)
+ if("PRG_printfile")
+ . = 1
+ if(!open_file)
+ return 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ if(!HDD)
+ return 1
+ var/datum/computer_file/data/F = HDD.find_file_by_name(open_file)
+ if(!F || !istype(F))
+ return 1
+ if(!computer.nano_printer)
+ error = "Missing Hardware: Your computer does not have required hardware to complete this operation."
+ return 1
+ if(!computer.nano_printer.print_text(parse_tags(F.stored_data)))
+ error = "Hardware error: Printer was unable to print the file. It may be out of paper."
+ return 1
+ if("PRG_copytousb")
+ . = 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ var/obj/item/weapon/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive
+ if(!HDD || !RHDD)
+ return 1
+ var/datum/computer_file/F = HDD.find_file_by_name(params)
+ if(!F || !istype(F))
+ return 1
+ var/datum/computer_file/C = F.clone(0)
+ RHDD.store_file(C)
+ if("PRG_copyfromusb")
+ . = 1
+ var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
+ var/obj/item/weapon/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive
+ if(!HDD || !RHDD)
+ return 1
+ var/datum/computer_file/F = RHDD.find_file_by_name(params)
+ if(!F || !istype(F))
+ return 1
+ var/datum/computer_file/C = F.clone(0)
+ HDD.store_file(C)
+
/datum/computer_file/program/filemanager/proc/parse_tags(var/t)
t = replacetext(t, "\[center\]", "
")
@@ -151,8 +150,8 @@
t = replacetext(t, "\[/i\]", "")
t = replacetext(t, "\[u\]", "")
t = replacetext(t, "\[/u\]", "")
- t = replacetext(t, "\[time\]", "[stationtime2text()]")
- t = replacetext(t, "\[date\]", "[stationdate2text()]")
+ t = replacetext(t, "\[time\]", "[worldtime2text()]")
+ t = replacetext(t, "\[date\]", "[time2text(world.realtime, "MMM DD")] [year_integer+540]")
t = replacetext(t, "\[large\]", "")
t = replacetext(t, "\[/large\]", "")
t = replacetext(t, "\[h1\]", "")
@@ -179,37 +178,40 @@
return t
-/datum/nano_module/program/computer_filemanager
- name = "NTOS File Manager"
+/datum/computer_file/program/filemanager/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
-/datum/nano_module/program/computer_filemanager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
- var/list/data = host.initial_data()
- var/datum/computer_file/program/filemanager/PRG
- PRG = program
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "file_manager", "NTOS File Manage", 575, 700, state = state)
+ ui.open()
+ ui.set_autoupdate(state = 1)
+
+/datum/computer_file/program/filemanager/ui_data(mob/user)
+ var/list/data = get_header_data()
var/obj/item/weapon/computer_hardware/hard_drive/HDD
var/obj/item/weapon/computer_hardware/hard_drive/portable/RHDD
- if(PRG.error)
- data["error"] = PRG.error
- if(PRG.open_file)
+ if(error)
+ data["error"] = error
+ if(open_file)
var/datum/computer_file/data/file
- if(!PRG.computer || !PRG.computer.hard_drive)
+ if(!computer || !computer.hard_drive)
data["error"] = "I/O ERROR: Unable to access hard drive."
else
- HDD = PRG.computer.hard_drive
- file = HDD.find_file_by_name(PRG.open_file)
+ HDD = computer.hard_drive
+ file = HDD.find_file_by_name(open_file)
if(!istype(file))
data["error"] = "I/O ERROR: Unable to open file."
else
- data["filedata"] = PRG.parse_tags(file.stored_data)
+ data["filedata"] = parse_tags(file.stored_data)
data["filename"] = "[file.filename].[file.filetype]"
else
- if(!PRG.computer || !PRG.computer.hard_drive)
+ if(!computer || !computer.hard_drive)
data["error"] = "I/O ERROR: Unable to access hard drive."
else
- HDD = PRG.computer.hard_drive
- RHDD = PRG.computer.portable_drive
+ HDD = computer.hard_drive
+ RHDD = computer.portable_drive
var/list/files[0]
for(var/datum/computer_file/F in HDD.stored_files)
files.Add(list(list(
@@ -231,11 +233,4 @@
)))
data["usbfiles"] = usbfiles
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "file_manager.tmpl", "NTOS File Manager", 575, 700, state = state)
- ui.auto_update_layout = 1
- ui.set_initial_data(data)
- ui.open()
-
-
+ return data
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/news_browser.dm b/code/modules/modular_computers/file_system/programs/news_browser.dm
deleted file mode 100644
index 2fe58ee6348..00000000000
--- a/code/modules/modular_computers/file_system/programs/news_browser.dm
+++ /dev/null
@@ -1,120 +0,0 @@
-/datum/computer_file/program/newsbrowser
- filename = "newsbrowser"
- filedesc = "NTNet/ExoNet News Browser"
- extended_desc = "This program may be used to view and download news articles from the network."
- program_icon_state = "generic"
- size = 8
- requires_ntnet = 1
- available_on_ntnet = 1
-
- nanomodule_path = /datum/nano_module/program/computer_newsbrowser/
- var/datum/computer_file/data/news_article/loaded_article
- var/download_progress = 0
- var/download_netspeed = 0
- var/downloading = 0
- var/message = ""
-
-/datum/computer_file/program/newsbrowser/process_tick()
- if(!downloading)
- return
- download_netspeed = 0
- // Speed defines are found in misc.dm
- switch(ntnet_status)
- if(1)
- download_netspeed = NTNETSPEED_LOWSIGNAL
- if(2)
- download_netspeed = NTNETSPEED_HIGHSIGNAL
- if(3)
- download_netspeed = NTNETSPEED_ETHERNET
- download_progress += download_netspeed
- if(download_progress >= loaded_article.size)
- downloading = 0
- requires_ntnet = 0 // Turn off NTNet requirement as we already loaded the file into local memory.
- nanomanager.update_uis(NM)
-
-/datum/computer_file/program/newsbrowser/kill_program()
- ..()
- requires_ntnet = 1
- loaded_article = null
- download_progress = 0
- downloading = 0
-
-/datum/computer_file/program/newsbrowser/Topic(href, href_list)
- if(..())
- return 1
- if(href_list["PRG_openarticle"])
- . = 1
- if(downloading || loaded_article)
- return 1
-
- for(var/datum/computer_file/data/news_article/N in ntnet_global.available_news)
- if(N.uid == text2num(href_list["PRG_openarticle"]))
- loaded_article = N.clone()
- downloading = 1
- break
- if(href_list["PRG_reset"])
- . = 1
- downloading = 0
- download_progress = 0
- requires_ntnet = 1
- loaded_article = null
- if(href_list["PRG_clearmessage"])
- . = 1
- message = ""
- if(href_list["PRG_savearticle"])
- . = 1
- if(downloading || !loaded_article)
- return
-
- var/savename = sanitize(input(usr, "Enter file name or leave blank to cancel:", "Save article", loaded_article.filename))
- if(!savename)
- return 1
- var/obj/item/weapon/computer_hardware/hard_drive/HDD = computer.hard_drive
- if(!HDD)
- return 1
- var/datum/computer_file/data/news_article/N = loaded_article.clone()
- N.filename = savename
- HDD.store_file(N)
- if(.)
- nanomanager.update_uis(NM)
-
-
-/datum/nano_module/program/computer_newsbrowser
- name = "NTNet/ExoNet News Browser"
-
-/datum/nano_module/program/computer_newsbrowser/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
-
- var/datum/computer_file/program/newsbrowser/PRG
- var/list/data = list()
- if(program)
- data = program.get_header_data()
- PRG = program
- else
- return
-
- data["message"] = PRG.message
- if(PRG.loaded_article && !PRG.downloading) // Viewing an article.
- data["title"] = PRG.loaded_article.filename
- data["article"] = PRG.loaded_article.stored_data
- else if(PRG.downloading) // Downloading an article.
- data["download_running"] = 1
- data["download_progress"] = PRG.download_progress
- data["download_maxprogress"] = PRG.loaded_article.size
- data["download_rate"] = PRG.download_netspeed
- else // Viewing list of articles
- var/list/all_articles[0]
- for(var/datum/computer_file/data/news_article/F in ntnet_global.available_news)
- all_articles.Add(list(list(
- "name" = F.filename,
- "size" = F.size,
- "uid" = F.uid
- )))
- data["all_articles"] = all_articles
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "news_browser.tmpl", "NTNet/ExoNet News Browser", 575, 700, state = state)
- ui.auto_update_layout = 1
- ui.set_initial_data(data)
- ui.open()
-
diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
index fc81882fbd7..cdb4a553935 100644
--- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm
+++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm
@@ -103,7 +103,7 @@
//datum/nano_module/program/computer_ntnetdownload
// name = "Network Downloader"
-/datum/computer_file/program/ntnetdownload/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state)
+/datum/computer_file/program/ntnetdownload/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/ntmonitor.dm
index 498e2eccf25..8df93e98fc4 100644
--- a/code/modules/modular_computers/file_system/programs/ntmonitor.dm
+++ b/code/modules/modular_computers/file_system/programs/ntmonitor.dm
@@ -8,11 +8,7 @@
required_access = access_network
available_on_ntnet = 1
-//datum/nano_module/computer_ntnetmonitor
-// name = "NTNet Diagnostics and Monitoring"
-// available_to_ai = TRUE
-
-/datum/computer_file/program/ntnetmonitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = always_state)
+/datum/computer_file/program/ntnetmonitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if (!ui)
@@ -67,12 +63,12 @@
. = 1
if(!ntnet_global)
return 1
- ntnet_global.toggle_function(params)
+ ntnet_global.toggle_function(text2num(params["id"]))
/datum/computer_file/program/ntnetmonitor/ui_data(mob/user)
if(!ntnet_global)
return
- var/list/data = list()
+ var/list/data = get_header_data()
data["ntnetstatus"] = ntnet_global.check_function()
data["ntnetrelays"] = ntnet_global.relays.len
@@ -84,7 +80,10 @@
data["config_communication"] = ntnet_global.setting_communication
data["config_systemcontrol"] = ntnet_global.setting_systemcontrol
- data["ntnetlogs"] = ntnet_global.logs
+ data["ntnetlogs"] = list()
+
+ for(var/i in ntnet_global.logs)
+ data["ntnetlogs"] += list(list("entry" = i))
data["ntnetmaxlogs"] = ntnet_global.setting_maxlogcount
return data
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm
index c609fa86bcb..4d3fcc17b2e 100644
--- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm
+++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm
@@ -9,7 +9,6 @@
network_destination = "NTNRC server"
ui_header = "ntnrc_idle.gif"
available_on_ntnet = 1
- nanomodule_path = /datum/nano_module/program/computer_chatclient/
var/last_message = null // Used to generate the toolbar icon
var/username
var/datum/ntnet_conversation/channel = null
@@ -19,143 +18,144 @@
/datum/computer_file/program/chatclient/New()
username = "DefaultUser[rand(100, 999)]"
-/datum/computer_file/program/chatclient/Topic(href, href_list)
+/datum/computer_file/program/chatclient/ui_act(action, params)
if(..())
return 1
- if(href_list["PRG_speak"])
- . = 1
- if(!channel)
- return 1
- var/mob/living/user = usr
- var/message = sanitize(input(user, "Enter message or leave blank to cancel: "))
- if(!message || !channel)
- return
- channel.add_message(message, username)
-
- if(href_list["PRG_joinchannel"])
- . = 1
- var/datum/ntnet_conversation/C
- for(var/datum/ntnet_conversation/chan in ntnet_global.chat_channels)
- if(chan.id == text2num(href_list["PRG_joinchannel"]))
- C = chan
- break
-
- if(!C)
- return 1
-
- if(netadmin_mode)
- channel = C // Bypasses normal leave/join and passwords. Technically makes the user invisible to others.
- return 1
-
- if(C.password)
- var/mob/living/user = usr
- var/password = sanitize(input(user,"Access Denied. Enter password:"))
- if(C && (password == C.password))
- C.add_client(src)
- channel = C
- return 1
- C.add_client(src)
- channel = C
- if(href_list["PRG_leavechannel"])
- . = 1
- if(channel)
- channel.remove_client(src)
- channel = null
- if(href_list["PRG_newchannel"])
- . = 1
- var/mob/living/user = usr
- var/channel_title = sanitize(input(user,"Enter channel name or leave blank to cancel:"))
- if(!channel_title)
- return
- var/datum/ntnet_conversation/C = new/datum/ntnet_conversation()
- C.add_client(src)
- C.operator = src
- channel = C
- C.title = channel_title
- if(href_list["PRG_toggleadmin"])
- . = 1
- if(netadmin_mode)
- netadmin_mode = 0
- if(channel)
- channel.remove_client(src) // We shouldn't be in channel's user list, but just in case...
- channel = null
- return 1
- var/mob/living/user = usr
- if(can_run(usr, 1, access_network))
- if(channel)
- var/response = alert(user, "Really engage admin-mode? You will be disconnected from your current channel!", "NTNRC Admin mode", "Yes", "No")
- if(response == "Yes")
- if(channel)
- channel.remove_client(src)
- channel = null
- else
- return
- netadmin_mode = 1
- if(href_list["PRG_changename"])
- . = 1
- var/mob/living/user = usr
- var/newname = sanitize(input(user,"Enter new nickname or leave blank to cancel:"))
- if(!newname)
- return 1
- if(channel)
- channel.add_status_message("[username] is now known as [newname].")
- username = newname
-
- if(href_list["PRG_savelog"])
- . = 1
- if(!channel)
- return
- var/mob/living/user = usr
- var/logname = input(user,"Enter desired logfile name (.log) or leave blank to cancel:")
- if(!logname || !channel)
- return 1
- var/datum/computer_file/data/logfile = new/datum/computer_file/data/logfile()
- // Now we will generate HTML-compliant file that can actually be viewed/printed.
- logfile.filename = logname
- logfile.stored_data = "\[b\]Logfile dump from NTNRC channel [channel.title]\[/b\]\[BR\]"
- for(var/logstring in channel.messages)
- logfile.stored_data += "[logstring]\[BR\]"
- logfile.stored_data += "\[b\]Logfile dump completed.\[/b\]"
- logfile.calculate_size()
- if(!computer || !computer.hard_drive || !computer.hard_drive.store_file(logfile))
- if(!computer)
- // This program shouldn't even be runnable without computer.
- CRASH("Var computer is null!")
+ switch(action)
+ if("PRG_speak")
+ . = 1
+ if(!channel)
return 1
- if(!computer.hard_drive)
- computer.visible_message("\The [computer] shows an \"I/O Error - Hard drive connection error\" warning.")
- else // In 99.9% cases this will mean our HDD is full
- computer.visible_message("\The [computer] shows an \"I/O Error - Hard drive may be full. Please free some space and try again. Required space: [logfile.size]GQ\" warning.")
- if(href_list["PRG_renamechannel"])
- . = 1
- if(!operator_mode || !channel)
- return 1
- var/mob/living/user = usr
- var/newname = sanitize(input(user, "Enter new channel name or leave blank to cancel:"))
- if(!newname || !channel)
- return
- channel.add_status_message("Channel renamed from [channel.title] to [newname] by operator.")
- channel.title = newname
- if(href_list["PRG_deletechannel"])
- . = 1
- if(channel && ((channel.operator == src) || netadmin_mode))
- qdel(channel)
+ var/mob/living/user = usr
+ var/message = sanitize(input(user, "Enter message or leave blank to cancel: "))
+ if(!message || !channel)
+ return
+ channel.add_message(message, username)
+
+ if("PRG_joinchannel")
+ . = 1
+ var/datum/ntnet_conversation/C
+ for(var/datum/ntnet_conversation/chan in ntnet_global.chat_channels)
+ if(chan.id == text2num(params["id"]))
+ C = chan
+ break
+
+ if(!C)
+ return 1
+
+ if(netadmin_mode)
+ channel = C // Bypasses normal leave/join and passwords. Technically makes the user invisible to others.
+ return 1
+
+ if(C.password)
+ var/mob/living/user = usr
+ var/password = sanitize(input(user,"Access Denied. Enter password:"))
+ if(C && (password == C.password))
+ C.add_client(src)
+ channel = C
+ return 1
+ C.add_client(src)
+ channel = C
+ if("PRG_leavechannel")
+ . = 1
+ if(channel)
+ channel.remove_client(src)
channel = null
- if(href_list["PRG_setpassword"])
- . = 1
- if(!channel || ((channel.operator != src) && !netadmin_mode))
- return 1
+ if("PRG_newchannel")
+ . = 1
+ var/mob/living/user = usr
+ var/channel_title = sanitize(input(user,"Enter channel name or leave blank to cancel:"))
+ if(!channel_title)
+ return
+ var/datum/ntnet_conversation/C = new/datum/ntnet_conversation()
+ C.add_client(src)
+ C.operator = src
+ channel = C
+ C.title = channel_title
+ if("PRG_toggleadmin")
+ . = 1
+ if(netadmin_mode)
+ netadmin_mode = 0
+ if(channel)
+ channel.remove_client(src) // We shouldn't be in channel's user list, but just in case...
+ channel = null
+ return 1
+ var/mob/living/user = usr
+ if(can_run(usr, 1, access_network))
+ if(channel)
+ var/response = alert(user, "Really engage admin-mode? You will be disconnected from your current channel!", "NTNRC Admin mode", "Yes", "No")
+ if(response == "Yes")
+ if(channel)
+ channel.remove_client(src)
+ channel = null
+ else
+ return
+ netadmin_mode = 1
+ if("PRG_changename")
+ . = 1
+ var/mob/living/user = usr
+ var/newname = sanitize(input(user,"Enter new nickname or leave blank to cancel:"))
+ if(!newname)
+ return 1
+ if(channel)
+ channel.add_status_message("[username] is now known as [newname].")
+ username = newname
- var/mob/living/user = usr
- var/newpassword = sanitize(input(user, "Enter new password for this channel. Leave blank to cancel, enter 'nopassword' to remove password completely:"))
- if(!channel || !newpassword || ((channel.operator != src) && !netadmin_mode))
- return 1
+ if("PRG_savelog")
+ . = 1
+ if(!channel)
+ return
+ var/mob/living/user = usr
+ var/logname = input(user,"Enter desired logfile name (.log) or leave blank to cancel:")
+ if(!logname || !channel)
+ return 1
+ var/datum/computer_file/data/logfile = new/datum/computer_file/data/logfile()
+ // Now we will generate HTML-compliant file that can actually be viewed/printed.
+ logfile.filename = logname
+ logfile.stored_data = "\[b\]Logfile dump from NTNRC channel [channel.title]\[/b\]\[BR\]"
+ for(var/logstring in channel.messages)
+ logfile.stored_data += "[logstring]\[BR\]"
+ logfile.stored_data += "\[b\]Logfile dump completed.\[/b\]"
+ logfile.calculate_size()
+ if(!computer || !computer.hard_drive || !computer.hard_drive.store_file(logfile))
+ if(!computer)
+ // This program shouldn't even be runnable without computer.
+ CRASH("Var computer is null!")
+ return 1
+ if(!computer.hard_drive)
+ computer.visible_message("\The [computer] shows an \"I/O Error - Hard drive connection error\" warning.")
+ else // In 99.9% cases this will mean our HDD is full
+ computer.visible_message("\The [computer] shows an \"I/O Error - Hard drive may be full. Please free some space and try again. Required space: [logfile.size]GQ\" warning.")
+ if("PRG_renamechannel")
+ . = 1
+ if(!operator_mode || !channel)
+ return 1
+ var/mob/living/user = usr
+ var/newname = sanitize(input(user, "Enter new channel name or leave blank to cancel:"))
+ if(!newname || !channel)
+ return
+ channel.add_status_message("Channel renamed from [channel.title] to [newname] by operator.")
+ channel.title = newname
+ if("PRG_deletechannel")
+ . = 1
+ if(channel && ((channel.operator == src) || netadmin_mode))
+ qdel(channel)
+ channel = null
+ if("PRG_setpassword")
+ . = 1
+ if(!channel || ((channel.operator != src) && !netadmin_mode))
+ return 1
- if(newpassword == "nopassword")
- channel.password = ""
- else
- channel.password = newpassword
+ var/mob/living/user = usr
+ var/newpassword = sanitize(input(user, "Enter new password for this channel. Leave blank to cancel, enter 'nopassword' to remove password completely:"))
+ if(!channel || !newpassword || ((channel.operator != src) && !netadmin_mode))
+ return 1
+
+ if(newpassword == "nopassword")
+ channel.password = ""
+ else
+ channel.password = newpassword
/datum/computer_file/program/chatclient/process_tick()
..()
@@ -172,44 +172,47 @@
else
ui_header = "ntnrc_idle.gif"
-/datum/computer_file/program/chatclient/kill_program(var/forced = 0)
+/datum/computer_file/program/chatclient/kill_program(forced = 0)
if(channel)
channel.remove_client(src)
channel = null
..(forced)
-/datum/nano_module/program/computer_chatclient
- name = "NTNet Relay Chat Client"
+/datum/computer_file/program/chatclient/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
-/datum/nano_module/program/computer_chatclient/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "ntnet_chat", "NTNet Relay Chat Client", 575, 700, state = state)
+ ui.open()
+ ui.set_autoupdate(state = 1)
+
+
+/datum/computer_file/program/chatclient/ui_data(mob/user)
if(!ntnet_global || !ntnet_global.chat_channels)
return
var/list/data = list()
- if(program)
- data = program.get_header_data()
- var/datum/computer_file/program/chatclient/C = program
- if(!istype(C))
- return
+ data = get_header_data()
- data["adminmode"] = C.netadmin_mode
- if(C.channel)
- data["title"] = C.channel.title
+
+ data["adminmode"] = netadmin_mode
+ if(channel)
+ data["title"] = channel.title
var/list/messages[0]
- for(var/M in C.channel.messages)
+ for(var/M in channel.messages)
messages.Add(list(list(
"msg" = M
)))
data["messages"] = messages
var/list/clients[0]
- for(var/datum/computer_file/program/chatclient/cl in C.channel.clients)
+ for(var/datum/computer_file/program/chatclient/cl in channel.clients)
clients.Add(list(list(
"name" = cl.username
)))
data["clients"] = clients
- C.operator_mode = (C.channel.operator == C) ? 1 : 0
- data["is_operator"] = C.operator_mode || C.netadmin_mode
+ operator_mode = (channel.operator == src) ? 1 : 0
+ data["is_operator"] = operator_mode || netadmin_mode
else // Channel selection screen
var/list/all_channels[0]
@@ -221,10 +224,4 @@
)))
data["all_channels"] = all_channels
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "ntnet_chat.tmpl", "NTNet Relay Chat Client", 575, 700, state = state)
- ui.auto_update_layout = 1
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
+ return data
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/nttransfer.dm b/code/modules/modular_computers/file_system/programs/nttransfer.dm
index 5bd76726aaa..2e863d744c0 100644
--- a/code/modules/modular_computers/file_system/programs/nttransfer.dm
+++ b/code/modules/modular_computers/file_system/programs/nttransfer.dm
@@ -10,7 +10,6 @@ var/global/nttransfer_uid = 0
requires_ntnet_feature = NTNET_PEERTOPEER
network_destination = "other device via P2P tunnel"
available_on_ntnet = 1
- nanomodule_path = /datum/nano_module/program/computer_nttransfer/
var/error = "" // Error screen
var/server_password = "" // Optional password to download the file.
@@ -55,8 +54,6 @@ var/global/nttransfer_uid = 0
downloaded_file = null
..(forced)
-
-
/datum/computer_file/program/nttransfer/proc/update_netspeed()
download_netspeed = 0
switch(ntnet_status)
@@ -87,35 +84,88 @@ var/global/nttransfer_uid = 0
download_completion = 0
-/datum/nano_module/program/computer_nttransfer
- name = "NTNet P2P Transfer Client"
+/datum/computer_file/program/nttransfer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
-/datum/nano_module/program/computer_nttransfer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state)
- if(!program)
- return
- var/datum/computer_file/program/nttransfer/PRG = program
- if(!istype(PRG))
- return
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "ntnet_transfer", "NTNet P2P Transfer Client", 575, 700, state = state)
+ ui.open()
+ ui.set_autoupdate(state = 1)
- var/list/data = program.get_header_data()
+/datum/computer_file/program/nttransfer/ui_act(action, params)
+ if(..())
+ return 1
+ switch(action)
+ if("PRG_downloadfile")
+ for(var/datum/computer_file/program/nttransfer/P in ntnet_global.fileservers)
+ if("[P.unique_token]" == params["id"])
+ remote = P
+ break
+ if(!remote || !remote.provided_file)
+ return
+ if(remote.server_password)
+ var/pass = sanitize(input(usr, "Code 401 Unauthorized. Please enter password:", "Password required"))
+ if(pass != remote.server_password)
+ error = "Incorrect Password"
+ return
+ downloaded_file = remote.provided_file.clone()
+ remote.connected_clients.Add(src)
+ return 1
+ if("PRG_reset")
+ error = ""
+ upload_menu = 0
+ finalize_download()
+ if(src in ntnet_global.fileservers)
+ ntnet_global.fileservers.Remove(src)
+ for(var/datum/computer_file/program/nttransfer/T in connected_clients)
+ T.crash_download("Remote server has forcibly closed the connection")
+ provided_file = null
+ return 1
+ if("PRG_setpassword")
+ var/pass = sanitize(input(usr, "Enter new server password. Leave blank to cancel, input 'none' to disable password.", "Server security", "none"))
+ if(!pass)
+ return
+ if(pass == "none")
+ server_password = ""
+ return
+ server_password = pass
+ return 1
+ if("PRG_uploadfile")
+ for(var/datum/computer_file/F in computer.hard_drive.stored_files)
+ if("[F.uid]" == params["id"])
+ if(F.unsendable)
+ error = "I/O Error: File locked."
+ return
+ provided_file = F
+ ntnet_global.fileservers.Add(src)
+ return
+ error = "I/O Error: Unable to locate file on hard drive."
+ return 1
+ if("PRG_uploadmenu")
+ upload_menu = 1
- if(PRG.error)
- data["error"] = PRG.error
- else if(PRG.downloaded_file)
+
+/datum/computer_file/program/nttransfer/ui_data(mob/user)
+
+ var/list/data = get_header_data()
+
+ if(error)
+ data["error"] = error
+ else if(downloaded_file)
data["downloading"] = 1
- data["download_size"] = PRG.downloaded_file.size
- data["download_progress"] = PRG.download_completion
- data["download_netspeed"] = PRG.actual_netspeed
- data["download_name"] = "[PRG.downloaded_file.filename].[PRG.downloaded_file.filetype]"
- else if (PRG.provided_file)
+ data["download_size"] = downloaded_file.size
+ data["download_progress"] = download_completion
+ data["download_netspeed"] = actual_netspeed
+ data["download_name"] = "[downloaded_file.filename].[downloaded_file.filetype]"
+ else if (provided_file)
data["uploading"] = 1
- data["upload_uid"] = PRG.unique_token
- data["upload_clients"] = PRG.connected_clients.len
- data["upload_haspassword"] = PRG.server_password ? 1 : 0
- data["upload_filename"] = "[PRG.provided_file.filename].[PRG.provided_file.filetype]"
- else if (PRG.upload_menu)
+ data["upload_uid"] = unique_token
+ data["upload_clients"] = connected_clients.len
+ data["upload_haspassword"] = server_password ? 1 : 0
+ data["upload_filename"] = "[provided_file.filename].[provided_file.filetype]"
+ else if (upload_menu)
var/list/all_files[0]
- for(var/datum/computer_file/F in PRG.computer.hard_drive.stored_files)
+ for(var/datum/computer_file/F in computer.hard_drive.stored_files)
all_files.Add(list(list(
"uid" = F.uid,
"filename" = "[F.filename].[F.filetype]",
@@ -133,62 +183,4 @@ var/global/nttransfer_uid = 0
)))
data["servers"] = all_servers
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "ntnet_transfer.tmpl", "NTNet P2P Transfer Client", 575, 700, state = state)
- ui.auto_update_layout = 1
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
-
-/datum/computer_file/program/nttransfer/Topic(href, href_list)
- if(..())
- return 1
- if(href_list["PRG_downloadfile"])
- for(var/datum/computer_file/program/nttransfer/P in ntnet_global.fileservers)
- if("[P.unique_token]" == href_list["PRG_downloadfile"])
- remote = P
- break
- if(!remote || !remote.provided_file)
- return
- if(remote.server_password)
- var/pass = sanitize(input(usr, "Code 401 Unauthorized. Please enter password:", "Password required"))
- if(pass != remote.server_password)
- error = "Incorrect Password"
- return
- downloaded_file = remote.provided_file.clone()
- remote.connected_clients.Add(src)
- return 1
- if(href_list["PRG_reset"])
- error = ""
- upload_menu = 0
- finalize_download()
- if(src in ntnet_global.fileservers)
- ntnet_global.fileservers.Remove(src)
- for(var/datum/computer_file/program/nttransfer/T in connected_clients)
- T.crash_download("Remote server has forcibly closed the connection")
- provided_file = null
- return 1
- if(href_list["PRG_setpassword"])
- var/pass = sanitize(input(usr, "Enter new server password. Leave blank to cancel, input 'none' to disable password.", "Server security", "none"))
- if(!pass)
- return
- if(pass == "none")
- server_password = ""
- return
- server_password = pass
- return 1
- if(href_list["PRG_uploadfile"])
- for(var/datum/computer_file/F in computer.hard_drive.stored_files)
- if("[F.uid]" == href_list["PRG_uploadfile"])
- if(F.unsendable)
- error = "I/O Error: File locked."
- return
- provided_file = F
- ntnet_global.fileservers.Add(src)
- return
- error = "I/O Error: Unable to locate file on hard drive."
- return 1
- if(href_list["PRG_uploadmenu"])
- upload_menu = 1
- return 0
+ return data
\ No newline at end of file
diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm
new file mode 100644
index 00000000000..7ec0cbd3b4a
--- /dev/null
+++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm
@@ -0,0 +1,88 @@
+
+
+/datum/computer_file/program/power_monitor
+ filename = "powermonitor"
+ filedesc = "Power Monitoring"
+ program_icon_state = "power_monitor"
+ extended_desc = "This program connects to sensors around the station to provide information about electrical systems"
+ ui_header = "power_norm.gif"
+ required_access = access_engine
+ usage_flags = PROGRAM_CONSOLE
+ requires_ntnet = 0
+ network_destination = "power monitoring system"
+ size = 9
+ var/has_alert = 0
+ var/obj/structure/cable/attached
+ var/list/history = list()
+ var/record_size = 60
+ var/record_interval = 50
+ var/next_record = 0
+
+
+
+
+/datum/computer_file/program/power_monitor/run_program(mob/living/user)
+ . = ..(user)
+ search()
+ history["supply"] = list()
+ history["demand"] = list()
+
+
+/datum/computer_file/program/power_monitor/process_tick()
+ if(!attached)
+ search()
+ else
+ record()
+
+/datum/computer_file/program/power_monitor/proc/search()
+ var/turf/T = get_turf(computer)
+ attached = locate() in T
+
+/datum/computer_file/program/power_monitor/proc/record()
+ if(world.time >= next_record)
+ next_record = world.time + record_interval
+
+ var/list/supply = history["supply"]
+ supply += attached.powernet.viewavail
+ if(supply.len > record_size)
+ supply.Cut(1, 2)
+
+ var/list/demand = history["demand"]
+ demand += attached.powernet.viewload
+ if(demand.len > record_size)
+ demand.Cut(1, 2)
+
+/datum/computer_file/program/power_monitor/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
+ datum/tgui/master_ui = null, datum/ui_state/state = default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "power_monitor_prog", "Power Monitoring", 1200, 1000, master_ui, state)
+ ui.open()
+
+/datum/computer_file/program/power_monitor/ui_data()
+ var/list/data = get_header_data()
+ data["stored"] = record_size
+ data["interval"] = record_interval / 10
+ data["attached"] = attached ? TRUE : FALSE
+ if(attached)
+ data["supply"] = attached.powernet.viewavail
+ data["demand"] = attached.powernet.viewload
+ data["history"] = history
+
+ data["areas"] = list()
+ if(attached)
+ for(var/obj/machinery/power/terminal/term in attached.powernet.nodes)
+ var/obj/machinery/power/apc/A = term.master
+ if(istype(A))
+ data["areas"] += list(list(
+ "name" = A.area.name,
+ "charge" = A.cell.percent(),
+ "load" = A.lastused_total,
+ "charging" = A.charging,
+ "eqp" = A.equipment,
+ "lgt" = A.lighting,
+ "env" = A.environ
+ ))
+
+ return data
+
diff --git a/code/modules/modular_computers/hardware/hard_drive.dm b/code/modules/modular_computers/hardware/hard_drive.dm
index d53975843da..4a74081c687 100644
--- a/code/modules/modular_computers/hardware/hard_drive.dm
+++ b/code/modules/modular_computers/hardware/hard_drive.dm
@@ -88,7 +88,7 @@
/obj/item/weapon/computer_hardware/hard_drive/proc/install_default_programs()
store_file(new/datum/computer_file/program/computerconfig(src)) // Computer configuration utility, allows hardware control and displays more info than status bar
store_file(new/datum/computer_file/program/ntnetdownload(src)) // NTNet Downloader Utility, allows users to download more software from NTNet repository
-// store_file(new/datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation.
+ store_file(new/datum/computer_file/program/filemanager(src)) // File manager, allows text editor functions and basic file manipulation.
// Use this proc to remove file from the drive. Returns 1 on success and 0 on failure. Contains necessary sanity checks.
diff --git a/code/modules/modular_computers/hardware/hardware.dm b/code/modules/modular_computers/hardware/hardware.dm
index 4e525cac247..a5ca5456650 100644
--- a/code/modules/modular_computers/hardware/hardware.dm
+++ b/code/modules/modular_computers/hardware/hardware.dm
@@ -22,6 +22,7 @@
return 1
// Nanopaste. Repair all damage if present for a single unit.
var/obj/item/stack/S = W
+/*
if(istype(S, /obj/item/stack/sheet/glass))
if(!damage)
user << "\The [src] doesn't seem to require repairs."
@@ -30,6 +31,7 @@
user << "You apply a bit of \the [W] to \the [src]. It immediately repairs all damage."
damage = 0
return 1
+*/
// Cable coil. Works as repair method, but will probably require multiple applications and more cable.
if(istype(S, /obj/item/stack/cable_coil))
if(!damage)
diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm
index db9c27657f4..a4d1b25f1b9 100644
--- a/code/modules/modular_computers/hardware/network_card.dm
+++ b/code/modules/modular_computers/hardware/network_card.dm
@@ -76,16 +76,15 @@ var/global/ntnet_card_uid = 1
return 0
if(holder2)
- return 2
-/*
+
var/turf/T = get_turf(holder2)
- if((T && istype(T)) && T.z in using_map.station_levels)
+ if((T && istype(T)) && T.z == ZLEVEL_STATION)
// Computer is on station. Low/High signal depending on what type of network card you have
if(long_range)
return 2
else
return 1
-*/
+
if(long_range) // Computer is not on station, but it has upgraded network card. Low signal.
return 1
diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm
deleted file mode 100644
index 6ae3cda4690..00000000000
--- a/code/modules/modular_computers/laptop_vendor.dm
+++ /dev/null
@@ -1,296 +0,0 @@
-// A vendor machine for modular computer portable devices - Laptops and Tablets
-
-/obj/machinery/lapvend
- name = "computer vendor"
- desc = "A vending machine with microfabricator capable of dispensing various NT-branded computers."
- icon = 'icons/obj/vending.dmi'
- icon_state = "robotics"
- layer = 2.9
- anchored = 1
- density = 1
-
- // The actual laptop/tablet
- var/obj/machinery/modular_computer/laptop/fabricated_laptop = null
- var/obj/item/modular_computer/tablet/fabricated_tablet = null
-
- // Utility vars
- var/state = 0 // 0: Select device type, 1: Select loadout, 2: Payment, 3: Thankyou screen
- var/devtype = 0 // 0: None(unselected), 1: Laptop, 2: Tablet
- var/total_price = 0 // Price of currently vended device.
-
- // Device loadout
- var/dev_cpu = 1 // 1: Default, 2: Upgraded
- var/dev_battery = 1 // 1: Default, 2: Upgraded, 3: Advanced
- var/dev_disk = 1 // 1: Default, 2: Upgraded, 3: Advanced
- var/dev_netcard = 0 // 0: None, 1: Basic, 2: Long-Range
- var/dev_tesla = 0 // 0: None, 1: Standard (LAPTOP ONLY)
- var/dev_nanoprint = 0 // 0: None, 1: Standard
- var/dev_card = 0 // 0: None, 1: Standard
-
-// Removes all traces of old order and allows you to begin configuration from scratch.
-/obj/machinery/lapvend/proc/reset_order()
- state = 0
- devtype = 0
- if(fabricated_laptop)
- qdel(fabricated_laptop)
- fabricated_laptop = null
- if(fabricated_tablet)
- qdel(fabricated_tablet)
- fabricated_tablet = null
- dev_cpu = 1
- dev_battery = 1
- dev_disk = 1
- dev_netcard = 0
- dev_tesla = 0
- dev_nanoprint = 0
- dev_card = 0
-
-// Recalculates the price and optionally even fabricates the device.
-/obj/machinery/lapvend/proc/fabricate_and_recalc_price(var/fabricate = 0)
- total_price = 0
- if(devtype == 1) // Laptop, generally cheaper to make it accessible for most station roles
- if(fabricate)
- fabricated_laptop = new(src)
- total_price = 99
- switch(dev_cpu)
- if(1)
- if(fabricate)
- fabricated_laptop.cpu.processor_unit = new/obj/item/weapon/computer_hardware/processor_unit/small(fabricated_laptop.cpu)
- if(2)
- if(fabricate)
- fabricated_laptop.cpu.processor_unit = new/obj/item/weapon/computer_hardware/processor_unit(fabricated_laptop.cpu)
- total_price += 299
- switch(dev_battery)
- if(1) // Basic(750C)
- if(fabricate)
- fabricated_laptop.cpu.battery_module = new/obj/item/weapon/computer_hardware/battery_module(fabricated_laptop.cpu)
- if(2) // Upgraded(1100C)
- if(fabricate)
- fabricated_laptop.cpu.battery_module = new/obj/item/weapon/computer_hardware/battery_module/advanced(fabricated_laptop.cpu)
- total_price += 199
- if(3) // Advanced(1500C)
- if(fabricate)
- fabricated_laptop.cpu.battery_module = new/obj/item/weapon/computer_hardware/battery_module/super(fabricated_laptop.cpu)
- total_price += 499
- switch(dev_disk)
- if(1) // Basic(128GQ)
- if(fabricate)
- fabricated_laptop.cpu.hard_drive = new/obj/item/weapon/computer_hardware/hard_drive(fabricated_laptop.cpu)
- if(2) // Upgraded(256GQ)
- if(fabricate)
- fabricated_laptop.cpu.hard_drive = new/obj/item/weapon/computer_hardware/hard_drive/advanced(fabricated_laptop.cpu)
- total_price += 99
- if(3) // Advanced(512GQ)
- if(fabricate)
- fabricated_laptop.cpu.hard_drive = new/obj/item/weapon/computer_hardware/hard_drive/super(fabricated_laptop.cpu)
- total_price += 299
- switch(dev_netcard)
- if(1) // Basic(Short-Range)
- if(fabricate)
- fabricated_laptop.cpu.network_card = new/obj/item/weapon/computer_hardware/network_card(fabricated_laptop.cpu)
- total_price += 99
- if(2) // Advanced (Long Range)
- if(fabricate)
- fabricated_laptop.cpu.network_card = new/obj/item/weapon/computer_hardware/network_card/advanced(fabricated_laptop.cpu)
- total_price += 299
- if(dev_tesla)
- total_price += 399
- if(fabricate)
- fabricated_laptop.tesla_link = new/obj/item/weapon/computer_hardware/tesla_link(fabricated_laptop)
- if(dev_nanoprint)
- total_price += 99
- if(fabricate)
- fabricated_laptop.cpu.nano_printer = new/obj/item/weapon/computer_hardware/nano_printer(fabricated_laptop.cpu)
- if(dev_card)
- total_price += 199
- if(fabricate)
- fabricated_laptop.cpu.card_slot = new/obj/item/weapon/computer_hardware/card_slot(fabricated_laptop.cpu)
-
- return total_price
- else if(devtype == 2) // Tablet, more expensive, not everyone could probably afford this.
- if(fabricate)
- fabricated_tablet = new(src)
- fabricated_tablet.processor_unit = new/obj/item/weapon/computer_hardware/processor_unit/small(fabricated_tablet)
- total_price = 199
- switch(dev_battery)
- if(1) // Basic(300C)
- if(fabricate)
- fabricated_tablet.battery_module = new/obj/item/weapon/computer_hardware/battery_module/nano(fabricated_tablet)
- if(2) // Upgraded(500C)
- if(fabricate)
- fabricated_tablet.battery_module = new/obj/item/weapon/computer_hardware/battery_module/micro(fabricated_tablet)
- total_price += 199
- if(3) // Advanced(750C)
- if(fabricate)
- fabricated_tablet.battery_module = new/obj/item/weapon/computer_hardware/battery_module(fabricated_tablet)
- total_price += 499
- switch(dev_disk)
- if(1) // Basic(32GQ)
- if(fabricate)
- fabricated_tablet.hard_drive = new/obj/item/weapon/computer_hardware/hard_drive/micro(fabricated_tablet)
- if(2) // Upgraded(64GQ)
- if(fabricate)
- fabricated_tablet.hard_drive = new/obj/item/weapon/computer_hardware/hard_drive/small(fabricated_tablet)
- total_price += 99
- if(3) // Advanced(128GQ)
- if(fabricate)
- fabricated_tablet.hard_drive = new/obj/item/weapon/computer_hardware/hard_drive(fabricated_tablet)
- total_price += 299
- switch(dev_netcard)
- if(1) // Basic(Short-Range)
- if(fabricate)
- fabricated_tablet.network_card = new/obj/item/weapon/computer_hardware/network_card(fabricated_tablet)
- total_price += 99
- if(2) // Advanced (Long Range)
- if(fabricate)
- fabricated_tablet.network_card = new/obj/item/weapon/computer_hardware/network_card/advanced(fabricated_tablet)
- total_price += 299
- if(dev_nanoprint)
- total_price += 99
- if(fabricate)
- fabricated_tablet.nano_printer = new/obj/item/weapon/computer_hardware/nano_printer(fabricated_tablet)
- if(dev_card)
- total_price += 199
- if(fabricate)
- fabricated_tablet.card_slot = new/obj/item/weapon/computer_hardware/card_slot(fabricated_tablet)
- return total_price
- return 0
-
-
-
-
-
-/obj/machinery/lapvend/Topic(href, href_list)
- if(..())
- return 1
-
- if(href_list["pick_device"])
- if(state) // We've already picked a device type
- return 0
- devtype = text2num(href_list["pick_device"])
- state = 1
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["clean_order"])
- reset_order()
- return 1
- if((state != 1) && devtype) // Following IFs should only be usable when in the Select Loadout mode
- return 0
- if(href_list["confirm_order"])
- state = 2 // Wait for ID swipe for payment processing
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_cpu"])
- dev_cpu = text2num(href_list["hw_cpu"])
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_battery"])
- dev_battery = text2num(href_list["hw_battery"])
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_disk"])
- dev_disk = text2num(href_list["hw_disk"])
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_netcard"])
- dev_netcard = text2num(href_list["hw_netcard"])
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_tesla"])
- dev_tesla = text2num(href_list["hw_tesla"])
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_nanoprint"])
- dev_nanoprint = text2num(href_list["hw_nanoprint"])
- fabricate_and_recalc_price(0)
- return 1
- if(href_list["hw_card"])
- dev_card = text2num(href_list["hw_card"])
- fabricate_and_recalc_price(0)
- return 1
- return 0
-
-/obj/machinery/lapvend/attack_hand(var/mob/user)
- ui_interact(user)
-
-/obj/machinery/lapvend/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- if(stat & (BROKEN | NOPOWER | MAINT))
- if(ui)
- ui.close()
- return 0
-
- var/list/data[0]
- data["state"] = state
- data["devtype"] = devtype
- data["hw_battery"] = dev_battery
- data["hw_disk"] = dev_disk
- data["hw_netcard"] = dev_netcard
- data["hw_tesla"] = dev_tesla
- data["hw_nanoprint"] = dev_nanoprint
- data["hw_card"] = dev_card
- data["hw_cpu"] = dev_cpu
- data["totalprice"] = "[total_price]"
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if (!ui)
- ui = new(user, src, ui_key, "computer_fabricator.tmpl", "Personal Computer Vendor", 500, 400)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
-
-
-obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob)
- var/obj/item/weapon/card/id/I = W.GetID()
- // Awaiting payment state
- if(state == 2)
- if(process_payment(I,W))
- fabricate_and_recalc_price(1)
- if((devtype == 1) && fabricated_laptop)
- fabricated_laptop.cpu.battery_module.charge_to_full()
- fabricated_laptop.forceMove(src.loc)
- fabricated_laptop.close_laptop()
- fabricated_laptop = null
- else if((devtype == 2) && fabricated_tablet)
- fabricated_tablet.battery_module.charge_to_full()
- fabricated_tablet.forceMove(src.loc)
- fabricated_tablet = null
- ping("Enjoy your new product!")
- state = 3
- return 1
- return 0
- return ..()
-
-
-// Simplified payment processing, returns 1 on success.
-/obj/machinery/lapvend/proc/process_payment(var/obj/item/weapon/card/id/I, var/obj/item/ID_container)
- if(I==ID_container || ID_container == null)
- visible_message("\The [usr] swipes \the [I] through \the [src].")
- else
- visible_message("\The [usr] swipes \the [ID_container] through \the [src].")
- var/datum/money_account/customer_account = get_account(I.associated_account_number)
- if (!customer_account || customer_account.suspended)
- ping("Connection error. Unable to connect to account.")
- return 0
-
- if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2)
- var/attempt_pin = input("Enter pin code", "Vendor transaction") as num
- customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2)
-
- if(!customer_account)
- ping("Unable to access account: incorrect credentials.")
- return 0
-
- if(total_price > customer_account.money)
- ping("Insufficient funds in account.")
- return 0
- else
- customer_account.money -= total_price
- var/datum/transaction/T = new()
- T.target_name = "Computer Manufacturer (via [src.name])"
- T.purpose = "Purchase of [(devtype == 1) ? "laptop computer" : "tablet microcomputer"]."
- T.amount = total_price
- T.source_terminal = src.name
- T.date = current_date_string
- T.time = stationtime2text()
- customer_account.transaction_log.Add(T)
- return 1
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index d57ab3136fa..0f984328612 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1527,11 +1527,16 @@
#include "code\modules\modular_computers\file_system\data.dm"
#include "code\modules\modular_computers\file_system\program.dm"
#include "code\modules\modular_computers\file_system\program_events.dm"
-#include "code\modules\modular_computers\file_system\programs\_program.dm"
+#include "code\modules\modular_computers\file_system\programs\alarm.dm"
#include "code\modules\modular_computers\file_system\programs\configurator.dm"
+#include "code\modules\modular_computers\file_system\programs\file_browser.dm"
#include "code\modules\modular_computers\file_system\programs\ntdownloader.dm"
#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm"
+#include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm"
+#include "code\modules\modular_computers\file_system\programs\nttransfer.dm"
+#include "code\modules\modular_computers\file_system\programs\powermonitor.dm"
#include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm"
+#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm"
#include "code\modules\modular_computers\hardware\battery_module.dm"
#include "code\modules\modular_computers\hardware\card_slot.dm"
#include "code\modules\modular_computers\hardware\hard_drive.dm"
@@ -1543,6 +1548,7 @@
#include "code\modules\modular_computers\hardware\tesla_link.dm"
#include "code\modules\modular_computers\NTNet\NTNet.dm"
#include "code\modules\modular_computers\NTNet\NTNet_relay.dm"
+#include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm"
#include "code\modules\ninja\__ninjaDefines.dm"
#include "code\modules\ninja\admin_ninja_verbs.dm"
#include "code\modules\ninja\energy_katana.dm"
diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js
index 7aa508866fb..ea7ae8a4094 100644
--- a/tgui/assets/tgui.js
+++ b/tgui/assets/tgui.js
@@ -1,14 +1,15 @@
-require=function t(e,n,r){function a(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(i)return i(o,!0);var c=Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var p=n[o]={exports:{}};e[o][0].call(p.exports,function(t){var n=e[o][1][t];return a(n?n:t)},p,p.exports,t,e,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?c[2]:void 0,l=Math.min((void 0===p?o:a(p,o))-u,o-s),f=1;for(s>u&&u+l>s&&(f=-1,u+=l-1,s+=l-1);l-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var r=t(80),a=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=r(this),n=i(e.length),o=arguments,s=o.length,u=a(s>1?o[1]:void 0,n),c=s>2?o[2]:void 0,p=void 0===c?n:a(c,n);p>u;)e[u++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var r=t(78),a=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,u=r(e),c=a(u.length),p=i(o,c);if(t&&n!=n){for(;c>p;)if(s=u[p++],s!=s)return!0}else for(;c>p;p++)if((t||p in u)&&u[p]===n)return t||p;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var r=t(17),a=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,u=3==t,c=4==t,p=6==t,l=5==t||p;return function(f,d,h){for(var m,v,g=i(f),b=a(g),y=r(d,h,3),x=o(b.length),_=0,w=e?s(f,x):n?s(f,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],v=y(m,_,g),t))if(e)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(c)return!1;return p?-1:u||c?c:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var r=t(38),a=t(36),i=t(83)("species");e.exports=function(t,e){var n;return a(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!a(n.prototype)||(n=void 0),r(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var r=t(11),a=t(83)("toStringTag"),i="Arguments"==r(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[a])?n:i?r(e):"Object"==(o=r(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var r={}.toString;e.exports=function(t){return r.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var r=t(46),a=t(31),i=t(60),o=t(17),s=t(69),u=t(18),c=t(27),p=t(42),l=t(44),f=t(82)("id"),d=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";a(t,f,++y)}return"O"+t[f]},_=function(t,e){var n,r=x(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,a){var p=t(function(t,i){s(t,p,e),t._i=r.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&c(i,n,t[a],t)});return i(p.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var r=n.n,a=n.p;delete e._i[n.i],n.r=!0,a&&(a.n=r),r&&(r.p=a),e._f==n&&(e._f=r),e._l==n&&(e._l=a),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),v&&r.setDesc(p.prototype,"size",{get:function(){return u(this[b])}}),p},def:function(t,e,n){var r,a,i=_(t,e);return i?i.v=n:(t._l=i={i:a=x(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=i),r&&(r.n=i),t[b]++,"F"!==a&&(t._i[a]=i)),t},getEntry:_,setStrong:function(t,e,n){p(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var r=t(27),a=t(10);e.exports=function(t){return function(){if(a(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return r(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var r=t(31),a=t(60),i=t(4),o=t(38),s=t(69),u=t(27),c=t(8),p=t(30),l=t(82)("weak"),f=Object.isExtensible||o,d=c(5),h=c(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,r){var i=t(function(t,a){s(t,i,e),t._i=m++,t._l=void 0,void 0!=a&&u(a,n,t[r],t)});return a(i.prototype,{"delete":function(t){return o(t)?f(t)?p(t,l)&&p(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?p(t,l)&&p(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(p(e,l)||r(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var r=t(29),a=t(22),i=t(61),o=t(60),s=t(27),u=t(69),c=t(38),p=t(24),l=t(43),f=t(66);e.exports=function(t,e,n,d,h,m){var v=r[t],g=v,b=h?"set":"add",y=g&&g.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!p(function(){(new g).entries().next()}))){var w,k=new g,E=k[b](m?{}:-0,1)!=k,S=p(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){u(e,g,t);var r=new v;return void 0!=n&&s(n,h,r[b],r),r}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),x[t]=g,a(a.G+a.W+a.F*(g!=v),x),m||d.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var r=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=r)},{}],17:[function(t,e,n){var r=t(2);e.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,a){return t.call(e,n,r,a)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var r=t(38),a=t(29).document,i=r(a)&&r(a.createElement);e.exports=function(t){return i?a.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var r=t(46);e.exports=function(t){var e=r.getKeys(t),n=r.getSymbols;if(n)for(var a,i=n(t),o=r.isEnum,s=0;i.length>s;)o.call(t,a=i[s++])&&e.push(a);return e}},{46:46}],22:[function(t,e,n){var r=t(29),a=t(16),i=t(31),o=t(61),s=t(17),u="prototype",c=function(t,e,n){var p,l,f,d,h=t&c.F,m=t&c.G,v=t&c.S,g=t&c.P,b=t&c.B,y=m?r:v?r[e]||(r[e]={}):(r[e]||{})[u],x=m?a:a[e]||(a[e]={}),_=x[u]||(x[u]={});m&&(n=e);for(p in n)l=!h&&y&&p in y,f=(l?y:n)[p],d=b&&l?s(f,r):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,p,f),x[p]!=f&&i(x,p,d),g&&_[p]!=f&&(_[p]=f)};r.core=a,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var r=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(a){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var r=t(31),a=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var u=s(t),c=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(a(String.prototype,t,n(o,u,c)),r(RegExp.prototype,u,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var r=t(4);e.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var r=t(17),a=t(40),i=t(35),o=t(4),s=t(79),u=t(84);e.exports=function(t,e,n,c){var p,l,f,d=u(t),h=r(n,c,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(p=s(t.length);p>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)a(f,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var r=t(78),a=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return a(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):a(r(t))}},{46:46,78:78}],29:[function(t,e,n){var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],30:[function(t,e,n){var r={}.hasOwnProperty;e.exports=function(t,e){return r.call(t,e)}},{}],31:[function(t,e,n){var r=t(46),a=t(59);e.exports=t(19)?function(t,e,n){return r.setDesc(t,e,a(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var r=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var r=t(45),a=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(r.Array===t||i[a]===t)}},{45:45,83:83}],36:[function(t,e,n){var r=t(11);e.exports=Array.isArray||function(t){return"Array"==r(t)}},{11:11}],37:[function(t,e,n){var r=t(38),a=Math.floor;e.exports=function(t){return!r(t)&&isFinite(t)&&a(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var r=t(38),a=t(11),i=t(83)("match");e.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==a(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var r=t(4);e.exports=function(t,e,n,a){try{return a?e(r(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&r(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var r=t(46),a=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=r.create(o,{next:a(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var r=t(48),a=t(22),i=t(61),o=t(31),s=t(30),u=t(45),c=t(41),p=t(66),l=t(46).getProto,f=t(83)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,x,_){c(n,e,b);var w,k,E=function(t){if(!d&&t in O)return O[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",C=y==v,P=!1,O=t.prototype,A=O[f]||O[h]||y&&O[y],T=A||E(y);if(A){var M=l(T.call(new t));p(M,S,!0),!r&&s(O,h)&&o(M,f,g),C&&A.name!==v&&(P=!0,T=function(){return A.call(this)})}if(r&&!_||!d&&!P&&O[f]||o(O,f,T),u[e]=T,u[S]=g,y)if(w={values:C?T:E(v),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in O||i(O,k,w[k]);else a(a.P+a.F*(d||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var r=t(83)("iterator"),a=!1;try{var i=[7][r]();i["return"]=function(){a=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!a)return!1;var n=!1;try{var i=[7],o=i[r]();o.next=function(){return{done:n=!0}},i[r]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var r=Object;e.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var r=t(46),a=t(78);e.exports=function(t,e){for(var n,i=a(t),o=r.getKeys(i),s=o.length,u=0;s>u;)if(i[n=o[u++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var r,a,i,o=t(29),s=t(75).set,u=o.MutationObserver||o.WebKitMutationObserver,c=o.process,p=o.Promise,l="process"==t(11)(c),f=function(){var t,e,n;for(l&&(t=c.domain)&&(c.domain=null,t.exit());r;)e=r.domain,n=r.fn,e&&e.enter(),n(),e&&e.exit(),r=r.next;a=void 0,t&&t.enter()};if(l)i=function(){c.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=p&&p.resolve?function(){p.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&c.domain};a&&(a.next=e),r||(r=e,i()),a=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var r=t(46),a=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},r=Symbol(),a="abcdefghijklmnopqrst";return e[r]=7,a.split("").forEach(function(t){n[t]=t}),7!=t({},e)[r]||Object.keys(t({},n)).join("")!=a})?function(t,e){for(var n=a(t),o=arguments,s=o.length,u=1,c=r.getKeys,p=r.getSymbols,l=r.isEnum;s>u;)for(var f,d=i(o[u++]),h=p?c(d).concat(p(d)):c(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var r=t(22),a=t(16),i=t(24);e.exports=function(t,e){var n=(a.Object||{})[t]||Object[t],o={};o[t]=e(n),r(r.S+r.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var r=t(46),a=t(78),i=r.isEnum;e.exports=function(t){return function(e){for(var n,o=a(e),s=r.getKeys(o),u=s.length,c=0,p=[];u>c;)i.call(o,n=s[c++])&&p.push(t?[n,o[n]]:o[n]);return p}}},{46:46,78:78}],56:[function(t,e,n){var r=t(46),a=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=r.getNames(a(t)),n=r.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var r=t(58),a=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=r._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var r,i=this,o=arguments,c=o.length,p=0,l=0;if(!u&&!c)return a(t,n,i);if(r=n.slice(),u)for(;e>p;p++)r[p]===s&&(r[p]=o[l++]);for(;c>l;)r.push(o[l++]);return a(t,r,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var r=t(61);e.exports=function(t,e){for(var n in e)r(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var r=t(29),a=t(31),i=t(82)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||a(n,i,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||a(n,"name",e)),t===r?t[e]=n:(o||delete t[e],a(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var r=t(46).getDesc,a=t(38),i=t(4),o=function(t,e){if(i(t),!a(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,a){try{a=t(17)(Function.call,r(Object.prototype,"__proto__").set,2),a(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:a(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var r=t(29),a=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=r[t];i&&e&&!e[o]&&a.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var r=t(46).setDesc,a=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!a(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var r=t(29),a="__core-js_shared__",i=r[a]||(r[a]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var r=t(4),a=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=r(t).constructor;return void 0===o||void 0==(n=r(o)[i])?e:a(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var r=t(77),a=t(18);e.exports=function(t){return function(e,n){var i,o,s=a(e)+"",u=r(n),c=s.length;return 0>u||u>=c?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===c||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var r=t(39),a=t(18);e.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return a(t)+""}},{18:18,39:39}],72:[function(t,e,n){var r=t(79),a=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",u=s.length,c=void 0===n?" ":n+"",p=r(e);if(u>=p)return s;""==c&&(c=" ");var l=p-u,f=a.call(c,Math.ceil(l/c.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var r=t(77),a=t(18);e.exports=function(t){var e=a(this)+"",n="",i=r(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var r=t(22),a=t(18),i=t(24),o=" \n\x0B\f\r \u2028\u2029\ufeff",s="["+o+"]",u="
",c=RegExp("^"+s+s+"*"),p=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),r(r.P+r.F*i(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=l.trim=function(t,e){return t=a(t)+"",1&e&&(t=t.replace(c,"")),2&e&&(t=t.replace(p,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var r,a,i,o=t(17),s=t(33),u=t(32),c=t(20),p=t(29),l=p.process,f=p.setImmediate,d=p.clearImmediate,h=p.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},r(m),m},d=function(t){delete v[t]},"process"==t(11)(l)?r=function(t){l.nextTick(o(b,t,1))}:h?(a=new h,i=a.port2,a.port1.onmessage=y,r=o(i.postMessage,i,1)):p.addEventListener&&"function"==typeof postMessage&&!p.importScripts?(r=function(t){p.postMessage(t+"","*")},p.addEventListener("message",y,!1)):r=g in c("script")?function(t){u.appendChild(c("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var r=t(77),a=Math.max,i=Math.min;e.exports=function(t,e){return t=r(t),0>t?a(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var r=Math.ceil,a=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?a:r)(t)}},{}],78:[function(t,e,n){var r=t(34),a=t(18);e.exports=function(t){return r(a(t))}},{18:18,34:34}],79:[function(t,e,n){var r=t(77),a=Math.min;e.exports=function(t){return t>0?a(r(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var r=t(18);e.exports=function(t){return Object(r(t))}},{18:18}],81:[function(t,e,n){var r=t(38);e.exports=function(t,e){if(!r(t))return t;var n,a;if(e&&"function"==typeof(n=t.toString)&&!r(a=n.call(t)))return a;if("function"==typeof(n=t.valueOf)&&!r(a=n.call(t)))return a;if(!e&&"function"==typeof(n=t.toString)&&!r(a=n.call(t)))return a;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var r=0,a=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+a).toString(36))}},{}],83:[function(t,e,n){var r=t(67)("wks"),a=t(82),i=t(29).Symbol;e.exports=function(t){return r[t]||(r[t]=i&&i[t]||(i||a)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var r=t(10),a=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[a]||t["@@iterator"]||i[r(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var r,a=t(46),i=t(22),o=t(19),s=t(59),u=t(32),c=t(20),p=t(30),l=t(11),f=t(33),d=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),C=Object.prototype,P=Array.prototype,O=P.slice,A=P.join,T=a.setDesc,M=a.getDesc,j=a.setDescs,L={};o||(r=!d(function(){return 7!=T(c("div"),"a",{get:function(){return 7}}).a}),a.setDesc=function(t,e,n){if(r)try{return T(t,e,n)}catch(a){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},a.getDesc=function(t,e){if(r)try{return M(t,e)}catch(n){}return p(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},a.setDescs=j=function(t,e){h(t);for(var n,r=a.getKeys(e),i=r.length,o=0;i>o;)a.setDesc(t,n=r[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:a.getDesc,defineProperty:a.setDesc,defineProperties:j});var N="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),R=N.concat("length","prototype"),F=N.length,D=function(){var t,e=c("iframe"),n=F,r=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("i;)p(a,r=t[i++])&&(~S(o,r)||o.push(r));return o}},B=function(){};i(i.S,"Object",{getPrototypeOf:a.getProto=a.getProto||function(t){return t=g(t),p(t,k)?t[k]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?C:null},getOwnPropertyNames:a.getNames=a.getNames||I(R,R.length,!0),create:a.create=a.create||function(t,e){var n;return null!==t?(B.prototype=h(t),n=new B,B.prototype=null,n[k]=t):n=D(),void 0===e?n:j(n,e)},keys:a.getKeys=a.getKeys||I(N,F,!1)});var q=function(t,e,n){if(!(e in L)){for(var r=[],a=0;e>a;a++)r[a]="a["+a+"]";L[e]=Function("F,a","return new F("+r.join(",")+")")}return L[e](t,n)};i(i.P,"Function",{bind:function(t){var e=m(this),n=O.call(arguments,1),r=function(){var a=n.concat(O.call(arguments));return this instanceof r?q(e,a.length,a):f(e,a,t)};return v(e.prototype)&&(r.prototype=e.prototype),r}}),i(i.P+i.F*d(function(){u&&O.call(u)}),"Array",{slice:function(t,e){var n=_(this.length),r=l(this);if(e=void 0===e?n:e,"Array"==r)return O.call(this,t,e);for(var a=x(t,n),i=x(e,n),o=_(i-a),s=Array(o),u=0;o>u;u++)s[u]="String"==r?this.charAt(a+u):this[a+u];return s}}),i(i.P+i.F*(w!=Object),"Array",{join:function(t){return A.call(w(this),void 0===t?",":t)}}),i(i.S,"Array",{isArray:t(36)});var U=function(t){return function(e,n){m(e);var r=w(this),a=_(r.length),i=t?a-1:0,o=t?-1:1;if(arguments.length<2)for(;;){if(i in r){n=r[i],i+=o;break}if(i+=o,t?0>i:i>=a)throw TypeError("Reduce of empty array with no initial value")}for(;t?i>=0:a>i;i+=o)i in r&&(n=e(n,r[i],i,this));return n}},V=function(t){return function(e){return t(this,e,arguments[1])}};i(i.P,"Array",{forEach:a.each=a.each||V(E(0)),map:V(E(1)),filter:V(E(2)),some:V(E(3)),every:V(E(4)),reduce:U(!1),reduceRight:U(!0),indexOf:V(S),lastIndexOf:function(t,e){var n=b(this),r=_(n.length),a=r-1;for(arguments.length>1&&(a=Math.min(a,y(e))),0>a&&(a=_(r+a));a>=0;a--)if(a in n&&n[a]===t)return a;return-1}}),i(i.S,"Date",{now:function(){return+new Date}});var z=function(t){return t>9?t:"0"+t};i(i.P+i.F*(d(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!d(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(this))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=0>e?"-":e>9999?"+":"";return r+("00000"+Math.abs(e)).slice(r?-6:-4)+"-"+z(t.getUTCMonth()+1)+"-"+z(t.getUTCDate())+"T"+z(t.getUTCHours())+":"+z(t.getUTCMinutes())+":"+z(t.getUTCSeconds())+"."+(n>99?n:"0"+z(n))+"Z"}})},{11:11,19:19,2:2,20:20,22:22,24:24,30:30,32:32,33:33,34:34,36:36,38:38,4:4,46:46,59:59,7:7,76:76,77:77,78:78,79:79,8:8,80:80,82:82}],86:[function(t,e,n){var r=t(22);r(r.P,"Array",{copyWithin:t(5)}),t(3)("copyWithin")},{22:22,3:3,5:5}],87:[function(t,e,n){var r=t(22);r(r.P,"Array",{fill:t(6)}),t(3)("fill")},{22:22,3:3,6:6}],88:[function(t,e,n){"use strict";var r=t(22),a=t(8)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),r(r.P+r.F*o,"Array",{findIndex:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],89:[function(t,e,n){"use strict";var r=t(22),a=t(8)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),r(r.P+r.F*o,"Array",{find:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],90:[function(t,e,n){"use strict";var r=t(17),a=t(22),i=t(80),o=t(40),s=t(35),u=t(79),c=t(84);a(a.S+a.F*!t(43)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,a,p,l=i(t),f="function"==typeof this?this:Array,d=arguments,h=d.length,m=h>1?d[1]:void 0,v=void 0!==m,g=0,b=c(l);if(v&&(m=r(m,h>2?d[2]:void 0,2)),void 0==b||f==Array&&s(b))for(e=u(l.length),n=new f(e);e>g;g++)n[g]=v?m(l[g],g):l[g];else for(p=b.call(l),n=new f;!(a=p.next()).done;g++)n[g]=v?o(p,m,[a.value,g],!0):a.value;return n.length=g,n}})},{17:17,22:22,35:35,40:40,43:43,79:79,80:80,84:84}],91:[function(t,e,n){"use strict";var r=t(3),a=t(44),i=t(45),o=t(78);e.exports=t(42)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,a(1)):"keys"==e?a(0,n):"values"==e?a(0,t[n]):a(0,[n,t[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},{3:3,42:42,44:44,45:45,78:78}],92:[function(t,e,n){"use strict";var r=t(22);r(r.S+r.F*t(24)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments,n=e.length,r=new("function"==typeof this?this:Array)(n);n>t;)r[t]=e[t++];return r.length=n,r}})},{22:22,24:24}],93:[function(t,e,n){t(65)("Array")},{65:65}],94:[function(t,e,n){"use strict";var r=t(46),a=t(38),i=t(83)("hasInstance"),o=Function.prototype;i in o||r.setDesc(o,i,{value:function(t){if("function"!=typeof this||!a(t))return!1;if(!a(this.prototype))return t instanceof this;for(;t=r.getProto(t);)if(this.prototype===t)return!0;return!1}})},{38:38,46:46,83:83}],95:[function(t,e,n){var r=t(46).setDesc,a=t(59),i=t(30),o=Function.prototype,s=/^\s*function ([^ (]*)/,u="name";u in o||t(19)&&r(o,u,{configurable:!0,get:function(){var t=(""+this).match(s),e=t?t[1]:"";return i(this,u)||r(this,u,a(5,e)),e}})},{19:19,30:30,46:46,59:59}],96:[function(t,e,n){"use strict";var r=t(12);t(15)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=r.getEntry(this,t);return e&&e.v},set:function(t,e){return r.def(this,0===t?0:t,e)}},r,!0)},{12:12,15:15}],97:[function(t,e,n){var r=t(22),a=t(50),i=Math.sqrt,o=Math.acosh;r(r.S+r.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:a(t-1+i(t-1)*i(t+1))}})},{22:22,50:50}],98:[function(t,e,n){function r(t){return isFinite(t=+t)&&0!=t?0>t?-r(-t):Math.log(t+Math.sqrt(t*t+1)):t}var a=t(22);a(a.S,"Math",{asinh:r})},{22:22}],99:[function(t,e,n){var r=t(22);r(r.S,"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{22:22}],100:[function(t,e,n){var r=t(22),a=t(51);r(r.S,"Math",{cbrt:function(t){return a(t=+t)*Math.pow(Math.abs(t),1/3)}})},{22:22,51:51}],101:[function(t,e,n){var r=t(22);r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{22:22}],102:[function(t,e,n){var r=t(22),a=Math.exp;r(r.S,"Math",{cosh:function(t){return(a(t=+t)+a(-t))/2}})},{22:22}],103:[function(t,e,n){var r=t(22);r(r.S,"Math",{expm1:t(49)})},{22:22,49:49}],104:[function(t,e,n){var r=t(22),a=t(51),i=Math.pow,o=i(2,-52),s=i(2,-23),u=i(2,127)*(2-s),c=i(2,-126),p=function(t){return t+1/o-1/o};r(r.S,"Math",{fround:function(t){var e,n,r=Math.abs(t),i=a(t);return c>r?i*p(r/c/s)*c*s:(e=(1+s/o)*r,n=e-(e-r),n>u||n!=n?i*(1/0):i*n)}})},{22:22,51:51}],105:[function(t,e,n){var r=t(22),a=Math.abs;r(r.S,"Math",{hypot:function(t,e){for(var n,r,i=0,o=0,s=arguments,u=s.length,c=0;u>o;)n=a(s[o++]),n>c?(r=c/n,i=i*r*r+1,c=n):n>0?(r=n/c,i+=r*r):i+=n;return c===1/0?1/0:c*Math.sqrt(i)}})},{22:22}],106:[function(t,e,n){var r=t(22),a=Math.imul;r(r.S+r.F*t(24)(function(){return-5!=a(4294967295,5)||2!=a.length}),"Math",{imul:function(t,e){var n=65535,r=+t,a=+e,i=n&r,o=n&a;return 0|i*o+((n&r>>>16)*o+i*(n&a>>>16)<<16>>>0)}})},{22:22,24:24}],107:[function(t,e,n){var r=t(22);r(r.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},{22:22}],108:[function(t,e,n){var r=t(22);r(r.S,"Math",{log1p:t(50)})},{22:22,50:50}],109:[function(t,e,n){var r=t(22);r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{22:22}],110:[function(t,e,n){var r=t(22);r(r.S,"Math",{sign:t(51)})},{22:22,51:51}],111:[function(t,e,n){var r=t(22),a=t(49),i=Math.exp;r(r.S+r.F*t(24)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(a(t)-a(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{22:22,24:24,49:49}],112:[function(t,e,n){var r=t(22),a=t(49),i=Math.exp;r(r.S,"Math",{tanh:function(t){var e=a(t=+t),n=a(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{22:22,49:49}],113:[function(t,e,n){var r=t(22);r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{22:22}],114:[function(t,e,n){"use strict";var r=t(46),a=t(29),i=t(30),o=t(11),s=t(81),u=t(24),c=t(74).trim,p="Number",l=a[p],f=l,d=l.prototype,h=o(r.create(d))==p,m="trim"in String.prototype,v=function(t){
-var e=s(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():c(e,3);var n,r,a,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:r=2,a=49;break;case 79:case 111:r=8,a=55;break;default:return+e}for(var o,u=e.slice(2),p=0,l=u.length;l>p;p++)if(o=u.charCodeAt(p),48>o||o>a)return NaN;return parseInt(u,r)}}return+e};l(" 0o1")&&l("0b1")&&!l("+0x1")||(l=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof l&&(h?u(function(){d.valueOf.call(n)}):o(n)!=p)?new f(v(e)):v(e)},r.each.call(t(19)?r.getNames(f):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),function(t){i(f,t)&&!i(l,t)&&r.setDesc(l,t,r.getDesc(f,t))}),l.prototype=d,d.constructor=l,t(61)(a,p,l))},{11:11,19:19,24:24,29:29,30:30,46:46,61:61,74:74,81:81}],115:[function(t,e,n){var r=t(22);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},{22:22}],116:[function(t,e,n){var r=t(22),a=t(29).isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&a(t)}})},{22:22,29:29}],117:[function(t,e,n){var r=t(22);r(r.S,"Number",{isInteger:t(37)})},{22:22,37:37}],118:[function(t,e,n){var r=t(22);r(r.S,"Number",{isNaN:function(t){return t!=t}})},{22:22}],119:[function(t,e,n){var r=t(22),a=t(37),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return a(t)&&i(t)<=9007199254740991}})},{22:22,37:37}],120:[function(t,e,n){var r=t(22);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{22:22}],121:[function(t,e,n){var r=t(22);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{22:22}],122:[function(t,e,n){var r=t(22);r(r.S,"Number",{parseFloat:parseFloat})},{22:22}],123:[function(t,e,n){var r=t(22);r(r.S,"Number",{parseInt:parseInt})},{22:22}],124:[function(t,e,n){var r=t(22);r(r.S+r.F,"Object",{assign:t(53)})},{22:22,53:53}],125:[function(t,e,n){var r=t(38);t(54)("freeze",function(t){return function(e){return t&&r(e)?t(e):e}})},{38:38,54:54}],126:[function(t,e,n){var r=t(78);t(54)("getOwnPropertyDescriptor",function(t){return function(e,n){return t(r(e),n)}})},{54:54,78:78}],127:[function(t,e,n){t(54)("getOwnPropertyNames",function(){return t(28).get})},{28:28,54:54}],128:[function(t,e,n){var r=t(80);t(54)("getPrototypeOf",function(t){return function(e){return t(r(e))}})},{54:54,80:80}],129:[function(t,e,n){var r=t(38);t(54)("isExtensible",function(t){return function(e){return r(e)?t?t(e):!0:!1}})},{38:38,54:54}],130:[function(t,e,n){var r=t(38);t(54)("isFrozen",function(t){return function(e){return r(e)?t?t(e):!1:!0}})},{38:38,54:54}],131:[function(t,e,n){var r=t(38);t(54)("isSealed",function(t){return function(e){return r(e)?t?t(e):!1:!0}})},{38:38,54:54}],132:[function(t,e,n){var r=t(22);r(r.S,"Object",{is:t(63)})},{22:22,63:63}],133:[function(t,e,n){var r=t(80);t(54)("keys",function(t){return function(e){return t(r(e))}})},{54:54,80:80}],134:[function(t,e,n){var r=t(38);t(54)("preventExtensions",function(t){return function(e){return t&&r(e)?t(e):e}})},{38:38,54:54}],135:[function(t,e,n){var r=t(38);t(54)("seal",function(t){return function(e){return t&&r(e)?t(e):e}})},{38:38,54:54}],136:[function(t,e,n){var r=t(22);r(r.S,"Object",{setPrototypeOf:t(64).set})},{22:22,64:64}],137:[function(t,e,n){"use strict";var r=t(10),a={};a[t(83)("toStringTag")]="z",a+""!="[object z]"&&t(61)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},{10:10,61:61,83:83}],138:[function(t,e,n){"use strict";var r,a=t(46),i=t(48),o=t(29),s=t(17),u=t(10),c=t(22),p=t(38),l=t(4),f=t(2),d=t(69),h=t(27),m=t(64).set,v=t(63),g=t(83)("species"),b=t(68),y=t(52),x="Promise",_=o.process,w="process"==u(_),k=o[x],E=function(){},S=function(t){var e,n=new k(E);return t&&(n.constructor=function(t){t(E,E)}),(e=k.resolve(n))["catch"](E),e===n},C=function(){function e(t){var n=new k(t);return m(n,e.prototype),n}var n=!1;try{if(n=k&&k.resolve&&S(),m(e,k),e.prototype=a.create(k.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(n=!1),n&&t(19)){var r=!1;k.resolve(a.setDesc({},"then",{get:function(){r=!0}})),n=r}}catch(i){n=!1}return n}(),P=function(t,e){return i&&t===k&&e===r?!0:v(t,e)},O=function(t){var e=l(t)[g];return void 0!=e?e:t},A=function(t){var e;return p(t)&&"function"==typeof(e=t.then)?e:!1},T=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r}),this.resolve=f(e),this.reject=f(n)},M=function(t){try{t()}catch(e){return{error:e}}},j=function(t,e){if(!t.n){t.n=!0;var n=t.c;y(function(){for(var r=t.v,a=1==t.s,i=0,s=function(e){var n,i,o=a?e.ok:e.fail,s=e.resolve,u=e.reject;try{o?(a||(t.h=!0),n=o===!0?r:o(r),n===e.promise?u(TypeError("Promise-chain cycle")):(i=A(n))?i.call(n,s,u):s(n)):u(r)}catch(c){u(c)}};n.length>i;)s(n[i++]);n.length=0,t.n=!1,e&&setTimeout(function(){var e,n,a=t.p;L(a)&&(w?_.emit("unhandledRejection",r,a):(e=o.onunhandledrejection)?e({promise:a,reason:r}):(n=o.console)&&n.error&&n.error("Unhandled promise rejection",r)),t.a=void 0},1)})}},L=function(t){var e,n=t._d,r=n.a||n.c,a=0;if(n.h)return!1;for(;r.length>a;)if(e=r[a++],e.fail||!L(e.promise))return!1;return!0},N=function(t){var e=this;e.d||(e.d=!0,e=e.r||e,e.v=t,e.s=2,e.a=e.c.slice(),j(e,!0))},R=function(t){var e,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===t)throw TypeError("Promise can't be resolved itself");(e=A(t))?y(function(){var r={r:n,d:!1};try{e.call(t,s(R,r,1),s(N,r,1))}catch(a){N.call(r,a)}}):(n.v=t,n.s=1,j(n,!1))}catch(r){N.call({r:n,d:!1},r)}}};C||(k=function(t){f(t);var e=this._d={p:d(this,k,x),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(s(R,e,1),s(N,e,1))}catch(n){N.call(e,n)}},t(60)(k.prototype,{then:function(t,e){var n=new T(b(this,k)),r=n.promise,a=this._d;return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,a.c.push(n),a.a&&a.a.push(n),a.s&&j(a,!1),r},"catch":function(t){return this.then(void 0,t)}})),c(c.G+c.W+c.F*!C,{Promise:k}),t(66)(k,x),t(65)(x),r=t(16)[x],c(c.S+c.F*!C,x,{reject:function(t){var e=new T(this),n=e.reject;return n(t),e.promise}}),c(c.S+c.F*(!C||S(!0)),x,{resolve:function(t){if(t instanceof k&&P(t.constructor,this))return t;var e=new T(this),n=e.resolve;return n(t),e.promise}}),c(c.S+c.F*!(C&&t(43)(function(t){k.all(t)["catch"](function(){})})),x,{all:function(t){var e=O(this),n=new T(e),r=n.resolve,i=n.reject,o=[],s=M(function(){h(t,!1,o.push,o);var n=o.length,s=Array(n);n?a.each.call(o,function(t,a){var o=!1;e.resolve(t).then(function(t){o||(o=!0,s[a]=t,--n||r(s))},i)}):r(s)});return s&&i(s.error),n.promise},race:function(t){var e=O(this),n=new T(e),r=n.reject,a=M(function(){h(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return a&&r(a.error),n.promise}})},{10:10,16:16,17:17,19:19,2:2,22:22,27:27,29:29,38:38,4:4,43:43,46:46,48:48,52:52,60:60,63:63,64:64,65:65,66:66,68:68,69:69,83:83}],139:[function(t,e,n){var r=t(22),a=Function.apply,i=t(4);r(r.S,"Reflect",{apply:function(t,e,n){return a.call(t,e,i(n))}})},{22:22,4:4}],140:[function(t,e,n){var r=t(46),a=t(22),i=t(2),o=t(4),s=t(38),u=Function.bind||t(16).Function.prototype.bind;a(a.S+a.F*t(24)(function(){function t(){}return!(Reflect.construct(function(){},[],t)instanceof t)}),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var a=[null];return a.push.apply(a,e),new(u.apply(t,a))}var c=n.prototype,p=r.create(s(c)?c:Object.prototype),l=Function.apply.call(t,p,e);return s(l)?l:p}})},{16:16,2:2,22:22,24:24,38:38,4:4,46:46}],141:[function(t,e,n){var r=t(46),a=t(22),i=t(4);a(a.S+a.F*t(24)(function(){Reflect.defineProperty(r.setDesc({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t);try{return r.setDesc(t,e,n),!0}catch(a){return!1}}})},{22:22,24:24,4:4,46:46}],142:[function(t,e,n){var r=t(22),a=t(46).getDesc,i=t(4);r(r.S,"Reflect",{deleteProperty:function(t,e){var n=a(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{22:22,4:4,46:46}],143:[function(t,e,n){"use strict";var r=t(22),a=t(4),i=function(t){this._t=a(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(41)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),r(r.S,"Reflect",{enumerate:function(t){return new i(t)}})},{22:22,4:4,41:41}],144:[function(t,e,n){var r=t(46),a=t(22),i=t(4);a(a.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return r.getDesc(i(t),e)}})},{22:22,4:4,46:46}],145:[function(t,e,n){var r=t(22),a=t(46).getProto,i=t(4);r(r.S,"Reflect",{getPrototypeOf:function(t){return a(i(t))}})},{22:22,4:4,46:46}],146:[function(t,e,n){function r(t,e){var n,o,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(n=a.getDesc(t,e))?i(n,"value")?n.value:void 0!==n.get?n.get.call(c):void 0:s(o=a.getProto(t))?r(o,e,c):void 0}var a=t(46),i=t(30),o=t(22),s=t(38),u=t(4);o(o.S,"Reflect",{get:r})},{22:22,30:30,38:38,4:4,46:46}],147:[function(t,e,n){var r=t(22);r(r.S,"Reflect",{has:function(t,e){return e in t}})},{22:22}],148:[function(t,e,n){var r=t(22),a=t(4),i=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(t){return a(t),i?i(t):!0}})},{22:22,4:4}],149:[function(t,e,n){var r=t(22);r(r.S,"Reflect",{ownKeys:t(56)})},{22:22,56:56}],150:[function(t,e,n){var r=t(22),a=t(4),i=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(t){a(t);try{return i&&i(t),!0}catch(e){return!1}}})},{22:22,4:4}],151:[function(t,e,n){var r=t(22),a=t(64);a&&r(r.S,"Reflect",{setPrototypeOf:function(t,e){a.check(t,e);try{return a.set(t,e),!0}catch(n){return!1}}})},{22:22,64:64}],152:[function(t,e,n){function r(t,e,n){var o,p,l=arguments.length<4?t:arguments[3],f=a.getDesc(u(t),e);if(!f){if(c(p=a.getProto(t)))return r(p,e,n,l);f=s(0)}return i(f,"value")?f.writable!==!1&&c(l)?(o=a.getDesc(l,e)||s(0),o.value=n,a.setDesc(l,e,o),!0):!1:void 0===f.set?!1:(f.set.call(l,n),!0)}var a=t(46),i=t(30),o=t(22),s=t(59),u=t(4),c=t(38);o(o.S,"Reflect",{set:r})},{22:22,30:30,38:38,4:4,46:46,59:59}],153:[function(t,e,n){var r=t(46),a=t(29),i=t(39),o=t(26),s=a.RegExp,u=s,c=s.prototype,p=/a/g,l=/a/g,f=new s(p)!==p;!t(19)||f&&!t(24)(function(){return l[t(83)("match")]=!1,s(p)!=p||s(l)==l||"/a/i"!=s(p,"i")})||(s=function(t,e){var n=i(t),r=void 0===e;return this instanceof s||!n||t.constructor!==s||!r?f?new u(n&&!r?t.source:t,e):u((n=t instanceof s)?t.source:t,n&&r?o.call(t):e):t},r.each.call(r.getNames(u),function(t){t in s||r.setDesc(s,t,{configurable:!0,get:function(){return u[t]},set:function(e){u[t]=e}})}),c.constructor=s,s.prototype=c,t(61)(a,"RegExp",s)),t(65)("RegExp")},{19:19,24:24,26:26,29:29,39:39,46:46,61:61,65:65,83:83}],154:[function(t,e,n){var r=t(46);t(19)&&"g"!=/./g.flags&&r.setDesc(RegExp.prototype,"flags",{configurable:!0,get:t(26)})},{19:19,26:26,46:46}],155:[function(t,e,n){t(25)("match",1,function(t,e){return function(n){"use strict";var r=t(this),a=void 0==n?void 0:n[e];return void 0!==a?a.call(n,r):RegExp(n)[e](r+"")}})},{25:25}],156:[function(t,e,n){t(25)("replace",2,function(t,e,n){return function(r,a){"use strict";var i=t(this),o=void 0==r?void 0:r[e];return void 0!==o?o.call(r,i,a):n.call(i+"",r,a)}})},{25:25}],157:[function(t,e,n){t(25)("search",1,function(t,e){return function(n){"use strict";var r=t(this),a=void 0==n?void 0:n[e];return void 0!==a?a.call(n,r):RegExp(n)[e](r+"")}})},{25:25}],158:[function(t,e,n){t(25)("split",2,function(t,e,n){return function(r,a){"use strict";var i=t(this),o=void 0==r?void 0:r[e];return void 0!==o?o.call(r,i,a):n.call(i+"",r,a)}})},{25:25}],159:[function(t,e,n){"use strict";var r=t(12);t(15)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t=0===t?0:t,t)}},r)},{12:12,15:15}],160:[function(t,e,n){"use strict";var r=t(22),a=t(70)(!1);r(r.P,"String",{codePointAt:function(t){return a(this,t)}})},{22:22,70:70}],161:[function(t,e,n){"use strict";var r=t(22),a=t(79),i=t(71),o="endsWith",s=""[o];r(r.P+r.F*t(23)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments,r=n.length>1?n[1]:void 0,u=a(e.length),c=void 0===r?u:Math.min(a(r),u),p=t+"";return s?s.call(e,p,c):e.slice(c-p.length,c)===p}})},{22:22,23:23,71:71,79:79}],162:[function(t,e,n){var r=t(22),a=t(76),i=String.fromCharCode,o=String.fromCodePoint;r(r.S+r.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],r=arguments,o=r.length,s=0;o>s;){if(e=+r[s++],a(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{22:22,76:76}],163:[function(t,e,n){"use strict";var r=t(22),a=t(71),i="includes";r(r.P+r.F*t(23)(i),"String",{includes:function(t){return!!~a(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{22:22,23:23,71:71}],164:[function(t,e,n){"use strict";var r=t(70)(!0);t(42)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},{42:42,70:70}],165:[function(t,e,n){var r=t(22),a=t(78),i=t(79);r(r.S,"String",{raw:function(t){for(var e=a(t.raw),n=i(e.length),r=arguments,o=r.length,s=[],u=0;n>u;)s.push(e[u++]+""),o>u&&s.push(r[u]+"");return s.join("")}})},{22:22,78:78,79:79}],166:[function(t,e,n){var r=t(22);r(r.P,"String",{repeat:t(73)})},{22:22,73:73}],167:[function(t,e,n){"use strict";var r=t(22),a=t(79),i=t(71),o="startsWith",s=""[o];r(r.P+r.F*t(23)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=arguments,r=a(Math.min(n.length>1?n[1]:void 0,e.length)),u=t+"";return s?s.call(e,u,r):e.slice(r,r+u.length)===u}})},{22:22,23:23,71:71,79:79}],168:[function(t,e,n){"use strict";t(74)("trim",function(t){return function(){return t(this,3)}})},{74:74}],169:[function(t,e,n){"use strict";var r=t(46),a=t(29),i=t(30),o=t(19),s=t(22),u=t(61),c=t(24),p=t(67),l=t(66),f=t(82),d=t(83),h=t(47),m=t(28),v=t(21),g=t(36),b=t(4),y=t(78),x=t(59),_=r.getDesc,w=r.setDesc,k=r.create,E=m.get,S=a.Symbol,C=a.JSON,P=C&&C.stringify,O=!1,A=d("_hidden"),T=r.isEnum,M=p("symbol-registry"),j=p("symbols"),L="function"==typeof S,N=Object.prototype,R=o&&c(function(){return 7!=k(w({},"a",{get:function(){return w(this,"a",{value:7}).a}})).a})?function(t,e,n){var r=_(N,e);r&&delete N[e],w(t,e,n),r&&t!==N&&w(N,e,r)}:w,F=function(t){var e=j[t]=k(S.prototype);return e._k=t,o&&O&&R(N,t,{configurable:!0,set:function(e){i(this,A)&&i(this[A],t)&&(this[A][t]=!1),R(this,t,x(1,e))}}),e},D=function(t){return"symbol"==typeof t},I=function(t,e,n){return n&&i(j,e)?(n.enumerable?(i(t,A)&&t[A][e]&&(t[A][e]=!1),n=k(n,{enumerable:x(0,!1)})):(i(t,A)||w(t,A,x(1,{})),t[A][e]=!0),R(t,e,n)):w(t,e,n)},B=function(t,e){b(t);for(var n,r=v(e=y(e)),a=0,i=r.length;i>a;)I(t,n=r[a++],e[n]);return t},q=function(t,e){return void 0===e?k(t):B(k(t),e)},U=function(t){var e=T.call(this,t);return e||!i(this,t)||!i(j,t)||i(this,A)&&this[A][t]?e:!0},V=function(t,e){var n=_(t=y(t),e);return!n||!i(j,e)||i(t,A)&&t[A][e]||(n.enumerable=!0),n},z=function(t){for(var e,n=E(y(t)),r=[],a=0;n.length>a;)i(j,e=n[a++])||e==A||r.push(e);return r},W=function(t){for(var e,n=E(y(t)),r=[],a=0;n.length>a;)i(j,e=n[a++])&&r.push(j[e]);return r},G=function(t){if(void 0!==t&&!D(t)){for(var e,n,r=[t],a=1,i=arguments;i.length>a;)r.push(i[a++]);return e=r[1],"function"==typeof e&&(n=e),(n||!g(e))&&(e=function(t,e){return n&&(e=n.call(this,t,e)),D(e)?void 0:e}),r[1]=e,P.apply(C,r)}},H=c(function(){var t=S();return"[null]"!=P([t])||"{}"!=P({a:t})||"{}"!=P(Object(t))});L||(S=function(){if(D(this))throw TypeError("Symbol is not a constructor");return F(f(arguments.length>0?arguments[0]:void 0))},u(S.prototype,"toString",function(){return this._k}),D=function(t){return t instanceof S},r.create=q,r.isEnum=U,r.getDesc=V,r.setDesc=I,r.setDescs=B,r.getNames=m.get=z,r.getSymbols=W,o&&!t(48)&&u(N,"propertyIsEnumerable",U,!0));var K={"for":function(t){return i(M,t+="")?M[t]:M[t]=S(t)},keyFor:function(t){return h(M,t)},useSetter:function(){O=!0},useSimple:function(){O=!1}};r.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(t){var e=d(t);K[t]=L?e:F(e)}),O=!0,s(s.G+s.W,{Symbol:S}),s(s.S,"Symbol",K),s(s.S+s.F*!L,"Object",{create:q,defineProperty:I,defineProperties:B,getOwnPropertyDescriptor:V,getOwnPropertyNames:z,getOwnPropertySymbols:W}),C&&s(s.S+s.F*(!L||H),"JSON",{stringify:G}),l(S,"Symbol"),l(Math,"Math",!0),l(a.JSON,"JSON",!0)},{19:19,21:21,22:22,24:24,28:28,29:29,30:30,36:36,4:4,46:46,47:47,48:48,59:59,61:61,66:66,67:67,78:78,82:82,83:83}],170:[function(t,e,n){"use strict";var r=t(46),a=t(61),i=t(14),o=t(38),s=t(30),u=i.frozenStore,c=i.WEAK,p=Object.isExtensible||o,l={},f=t(15)("WeakMap",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){if(o(t)){if(!p(t))return u(this).get(t);if(s(t,c))return t[c][this._i]}},set:function(t,e){return i.def(this,t,e)}},i,!0,!0);7!=(new f).set((Object.freeze||Object)(l),7).get(l)&&r.each.call(["delete","has","get","set"],function(t){var e=f.prototype,n=e[t];a(e,t,function(e,r){if(o(e)&&!p(e)){var a=u(this)[t](e,r);return"set"==t?this:a}return n.call(this,e,r)})})},{14:14,15:15,30:30,38:38,46:46,61:61}],171:[function(t,e,n){"use strict";var r=t(14);t(15)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t,!0)}},r,!1,!0)},{14:14,15:15}],172:[function(t,e,n){"use strict";var r=t(22),a=t(7)(!0);r(r.P,"Array",{includes:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)("includes")},{22:22,3:3,7:7}],173:[function(t,e,n){var r=t(22);r(r.P,"Map",{toJSON:t(13)("Map")})},{13:13,22:22}],174:[function(t,e,n){var r=t(22),a=t(55)(!0);r(r.S,"Object",{entries:function(t){return a(t)}})},{22:22,55:55}],175:[function(t,e,n){var r=t(46),a=t(22),i=t(56),o=t(78),s=t(59);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=o(t),u=r.setDesc,c=r.getDesc,p=i(a),l={},f=0;p.length>f;)n=c(a,e=p[f++]),e in l?u(l,e,s(0,n)):l[e]=n;return l}})},{22:22,46:46,56:56,59:59,78:78}],176:[function(t,e,n){var r=t(22),a=t(55)(!1);r(r.S,"Object",{values:function(t){return a(t)}})},{22:22,55:55}],177:[function(t,e,n){var r=t(22),a=t(62)(/[\\^$*+?.()|[\]{}]/g,"\\$&");r(r.S,"RegExp",{escape:function(t){return a(t)}})},{22:22,62:62}],178:[function(t,e,n){var r=t(22);r(r.P,"Set",{toJSON:t(13)("Set")})},{13:13,22:22}],179:[function(t,e,n){"use strict";var r=t(22),a=t(70)(!0);r(r.P,"String",{at:function(t){return a(this,t)}})},{22:22,70:70}],180:[function(t,e,n){"use strict";var r=t(22),a=t(72);r(r.P,"String",{padLeft:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{22:22,72:72}],181:[function(t,e,n){"use strict";var r=t(22),a=t(72);r(r.P,"String",{padRight:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},{22:22,72:72}],182:[function(t,e,n){"use strict";t(74)("trimLeft",function(t){return function(){return t(this,1)}})},{74:74}],183:[function(t,e,n){"use strict";t(74)("trimRight",function(t){return function(){return t(this,2)}})},{74:74}],184:[function(t,e,n){var r=t(46),a=t(22),i=t(17),o=t(16).Array||Array,s={},u=function(t,e){r.each.call(t.split(","),function(t){void 0==e&&t in o?s[t]=o[t]:t in[]&&(s[t]=i(Function.call,[][t],e))})};u("pop,reverse,shift,keys,values,entries",1),u("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),u("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),a(a.S,"Array",s)},{16:16,17:17,22:22,46:46}],185:[function(t,e,n){t(91);var r=t(29),a=t(31),i=t(45),o=t(83)("iterator"),s=r.NodeList,u=r.HTMLCollection,c=s&&s.prototype,p=u&&u.prototype,l=i.NodeList=i.HTMLCollection=i.Array;c&&!c[o]&&a(c,o,l),p&&!p[o]&&a(p,o,l)},{29:29,31:31,45:45,83:83,91:91}],186:[function(t,e,n){var r=t(22),a=t(75);r(r.G+r.B,{setImmediate:a.set,clearImmediate:a.clear})},{22:22,75:75}],187:[function(t,e,n){var r=t(29),a=t(22),i=t(33),o=t(57),s=r.navigator,u=!!s&&/MSIE .\./.test(s.userAgent),c=function(t){return u?function(e,n){return t(i(o,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),n)}:t};a(a.G+a.B+a.F*u,{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},{22:22,29:29,33:33,57:57}],188:[function(t,e,n){t(85),t(169),t(124),t(132),t(136),t(137),t(125),t(135),t(134),t(130),t(131),t(129),t(126),t(128),t(133),t(127),t(95),t(94),t(114),t(115),t(116),t(117),t(118),t(119),t(120),t(121),t(122),t(123),t(97),t(98),t(99),t(100),t(101),t(102),t(103),t(104),t(105),t(106),t(107),t(108),t(109),t(110),t(111),t(112),t(113),t(162),t(165),t(168),t(164),t(160),t(161),t(163),t(166),t(167),t(90),t(92),t(91),t(93),t(86),t(87),t(89),t(88),t(153),t(154),t(155),t(156),t(157),t(158),t(138),t(96),t(159),t(170),t(171),t(139),t(140),t(141),t(142),t(143),t(146),t(144),t(145),t(147),t(148),t(149),t(150),t(152),t(151),t(172),t(179),t(180),t(181),t(182),t(183),t(177),t(175),t(176),t(174),t(173),t(178),t(184),t(187),t(186),t(185),e.exports=t(16)},{100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,16:16,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,98:98,99:99}],189:[function(t,e,n){(function(n){(function(t,n){!function(n){"use strict";function r(t,e,n,r){var a=Object.create((e||i).prototype),o=new h(r||[]);return a._invoke=l(t,n,o),a}function a(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){return{type:"throw",arg:r}}}function i(){}function o(){}function s(){}function u(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function c(t){this.arg=t}function p(e){function n(t,n){var r=e[t](n),a=r.value;return a instanceof c?Promise.resolve(a.arg).then(i,o):Promise.resolve(a).then(function(t){return r.value=t,r})}function r(t,e){function r(){return n(t,e)}return a=a?a.then(r,r):new Promise(function(t){t(r())})}"object"==typeof t&&t.domain&&(n=t.domain.bind(n));var a,i=n.bind(e,"next"),o=n.bind(e,"throw");n.bind(e,"return");this._invoke=r}function l(t,e,n){var r=w;return function(i,o){if(r===E)throw Error("Generator is already running");if(r===S){if("throw"===i)throw o;return v()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===g){n.delegate=null;var u=s.iterator["return"];if(u){var c=a(u,s.iterator,o);if("throw"===c.type){i="throw",o=c.arg;continue}}if("return"===i)continue}var c=a(s.iterator[i],s.iterator,o);if("throw"===c.type){n.delegate=null,i="throw",o=c.arg;continue}i="next",o=g;var p=c.arg;if(!p.done)return r=k,p;n[s.resultName]=p.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n._sent=o,r===k?n.sent=o:n.sent=g;else if("throw"===i){if(r===w)throw r=S,o;n.dispatchException(o)&&(i="next",o=g)}else"return"===i&&n.abrupt("return",o);r=E;var c=a(t,e,n);if("normal"===c.type){r=n.done?S:k;var p={value:c.arg,done:n.done};if(c.arg!==C)return p;n.delegate&&"next"===i&&(o=g)}else"throw"===c.type&&(r=S,i="throw",o=c.arg)}}}function f(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function d(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function h(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(f,this),this.reset(!0)}function m(t){if(t){var e=t[y];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,r=function a(){for(;++n=0;--r){var a=this.tryEntries[r],i=a.completion;if("root"===a.tryLoc)return e("end");if(a.tryLoc<=this.prev){var o=b.call(a,"catchLoc"),s=b.call(a,"finallyLoc");if(o&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),C}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var a=r.arg;d(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},C}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(202),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{202:202}],190:[function(t,e,n){!function(t){"use strict";function e(){return p.createDocumentFragment()}function n(t){return p.createElement(t)}function r(t){if(1===t.length)return a(t[0]);for(var n=e(),r=B.call(t),i=0;i-1}}([].indexOf||function(t){for(q=this.length;q--&&this[q]!==t;);return q}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=u?e(i):document.fonts.load(c(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(f,25)},function(){e(i)})};f()}else n(function(){function n(){var e;(e=-1!=v&&-1!=g||-1!=v&&-1!=b||-1!=g&&-1!=b)&&((e=v!=g&&v!=b&&g!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(v==y&&g==y&&b==y||v==x&&g==x&&b==x||v==_&&g==_&&b==_)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function f(){if((new Date).getTime()-p>=u)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(v=d.a.offsetWidth,g=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(f,50)}}var d=new r(s),h=new r(s),m=new r(s),v=-1,g=-1,b=-1,y=-1,x=-1,_=-1,w=document.createElement("div"),k=0;w.dir="ltr",a(d,c(i,"sans-serif")),a(h,c(i,"serif")),a(m,c(i,"monospace")),w.appendChild(d.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=d.a.offsetWidth,x=h.a.offsetWidth,_=m.a.offsetWidth,f(),o(d,function(t){v=t,n()}),a(d,c(i,'"'+i.family+'",sans-serif')),o(h,function(t){g=t,n()}),a(h,c(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),a(m,c(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],193:[function(t,e,n){!function(t,n){function r(t,e){var n=t.createElement("p"),r=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function a(){var t=x.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=x.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),x.elements=n+" "+t,p(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,r){if(e||(e=n),f)return e.createElement(t);r||(r=o(e));var a;return a=r.cache[t]?r.cache[t].cloneNode():v.test(t)?(r.cache[t]=r.createElem(t)).cloneNode():r.createElem(t),!a.canHaveChildren||m.test(t)||a.tagUrn?a:r.frag.appendChild(a)}function u(t,e){if(t||(t=n),f)return t.createDocumentFragment();e=e||o(t);for(var r=e.frag.cloneNode(),i=0,s=a(),u=s.length;u>i;i++)r.createElement(s[i]);return r}function c(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return x.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(x,e.frag)}function p(t){t||(t=n);var e=o(t);return!x.shivCSS||l||e.hasCSS||(e.hasCSS=!!r(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),f||c(t,e),t}var l,f,d="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,f=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,f=!0}}();var x={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:d,shivCSS:h.shivCSS!==!1,supportsUnknownElements:f,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:p,createElement:s,createDocumentFragment:u,addElements:i};t.html5=x,p(n),"object"==typeof e&&e.exports&&(e.exports=x)}("undefined"!=typeof window?window:this,document)},{}],194:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,r){for(var i,o=n.slice(),s=a(e,t),u=0,c=o.length;c>u&&(handler=o[u],"object"==typeof handler?"function"==typeof handler.handleEvent&&handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return i=!s.stoppedPropagation,r&&i&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function r(t,e,r){var a=b(e||t,r);v(t,"textContent",n(function(){return a.get.call(this)},function(t){a.set.call(this,t)}))}function a(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!f&&k.test(document.readyState)&&(f=!f,document.detachEvent(d,u),t=document.createEvent("Event"),t.initEvent(h,!0,!0),document.dispatchEvent(t))}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function p(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var l=!0,f=!1,d="onreadystatechange",h="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var r in n)if(y.call(n,r))try{v(e,r,n[r])}catch(a){t.console&&console.log(r+" failed on object:",e,a.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,x=t.Element.prototype,_=t.Text.prototype,w=/^[a-z]+$/,k=/loaded|complete/,E={},S=document.createElement("div"),C=document.documentElement,P=C.removeAttribute,O=C.setAttribute;r(t.HTMLCommentElement.prototype,x,"nodeValue"),r(t.HTMLScriptElement.prototype,null,"text"),r(_,null,"nodeValue"),r(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(x,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,r){if("function"==typeof n||"object"==typeof n){var a,o,u=this,c="on"+t,l=u[m]||v(u,m,{value:{}})[m],f=l[c]||(l[c]={}),d=f.h||(f.h=[]);if(!y.call(f,"w")){if(f.w=function(t){return t[m]||e(u,p(u,t),d,!1)},!y.call(E,c))if(w.test(t)){try{a=document.createEventObject(),a[m]=!0,9!=u.nodeType&&(null==u.parentNode&&S.appendChild(u),(o=u.getAttribute(c))&&P.call(u,c)),u.fireEvent(c,a),E[c]=!0}catch(a){for(E[c]=!1;S.hasChildNodes();)S.removeChild(S.firstChild)}null!=o&&O.call(u,c,o)}else E[c]=!1;(f.n=E[c])&&u.attachEvent(c,f.w)}i(d,n)<0&&d[r?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}}},dispatchEvent:{value:function(t){var n,r=this,a="on"+t.type,i=r[m],o=i&&i[a],s=!!o;return t.target||(t.target=r),s?o.n?r.fireEvent(a,t):e(r,t,o.h,!0):(n=r.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){if("function"==typeof e||"object"==typeof e){var r=this,a="on"+t,o=r[m],s=o&&o[a],u=s&&s.h,c=u?i(u,e):-1;c>-1&&u.splice(c,1)}}}}),g(_,{addEventListener:{value:x.addEventListener},dispatchEvent:{value:x.dispatchEvent},removeEventListener:{value:x.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var r=this,a="on"+t,o=r[m]||v(r,m,{value:{}})[m],s=o[a]||(o[a]={}),u=s.h||(s.h=[]);i(u,e)<0&&(r[a]||(r[a]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),r.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,r="on"+t.type,a=n[m],i=a&&a[r],o=!!i;return o&&(i.n?n.fireEvent(r,t):e(n,t,i.h,!0))}},removeEventListener:{value:x.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:{value:function(e,n,r){var a=this;x.addEventListener.call(a,e,n,r),l&&e===h&&!k.test(a.readyState)&&(l=!1,a.attachEvent(d,u),t==top&&!function i(t){try{a.documentElement.doScroll("left"),u()}catch(e){setTimeout(i,50)}}())}},dispatchEvent:{value:x.dispatchEvent},removeEventListener:{value:x.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,r=/^(top|right|bottom|left)$/,a=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,c=u.style,p=u.currentStyle,l=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(a,i),e=p?p[t]:c[t],n.test(e)&&!r.test(t)&&(o=c.left,s=l&&l.left,s&&(l.left=p.left),c.left="fontSize"===t?"1em":e,e=c.pixelLeft+"px",c.left=o,s&&(l.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,r){return r?new e(n):new t(n)}}()},addEventListener:{value:function(n,r,a){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,p(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),i(o,r)<0&&o[a?"unshift":"push"](r)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,r){var a="on"+e,o=(t[a]||Object)[m],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n=s)return(0,u["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,c.times)(r,(0,c.minus)(n[l],n[l-1])));for(var f=[(0,c.plus)(n[0],p(i[0],i[1]))],l=1;s-2>=l;l++)f.push((0,c.minus)(n[l],(0,c.average)([i[l],i[l-1]])));f.push((0,c.minus)(n[s-1],p(i[s-2],i[s-3])));var d=f[0],h=f[1],m=n[0],v=n[1],g=(e=(0,o["default"])()).moveto.apply(e,a(m)).curveto(d[0],d[1],h[0],h[1],v[0],v[1]);return{path:(0,c.range)(2,s).reduce(function(t,e){var r=f[e],a=n[e];return t.smoothcurveto(r[0],r[1],a[0],a[1])},g),centroid:(0,c.average)(n)}},e.exports=n["default"]},{198:198,199:199,200:200}],196:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(197),o=r(i),s=t(198),u=1e-5,c=function(t,e){var n=t.map(e),r=n.sort(function(t,e){var n=a(t,2),r=n[0],i=(n[1],a(e,2)),o=i[0];i[1];return r-o}),i=r.length,o=r[0][0],c=r[i-1][0],p=(0,s.minBy)(r,function(t){return t[1]}),l=(0,s.maxBy)(r,function(t){return t[1]});return o==c&&(c+=u),p==l&&(l+=u),{points:r,xmin:o,xmax:c,ymin:p,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,r=t.yaccessor,i=t.width,u=t.height,p=t.closed,l=t.min,f=t.max;n||(n=function(t){var e=a(t,2),n=e[0];e[1];return n}),r||(r=function(t){var e=a(t,2),n=(e[0],e[1]);return n});var d=function(t){return[n(t),r(t)]},h=e.map(function(t){return c(t,d)}),m=(0,s.minBy)(h,function(t){return t.xmin}),v=(0,s.maxBy)(h,function(t){return t.xmax}),g=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==f?(0,s.maxBy)(h,function(t){return t.ymax}):f;p&&(g=Math.min(g,0),b=Math.max(b,0));var y=p?0:g,x=(0,o["default"])([m,v],[0,i]),_=(0,o["default"])([g,b],[u,0]),w=function(t){var e=a(t,2),n=e[0],r=e[1];return[x(n),_(r)]};return{arranged:h,scale:w,xscale:x,yscale:_,base:y}},e.exports=n["default"]},{197:197,198:198}],197:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function i(t,e){var n=r(t,2),a=n[0],o=n[1],s=r(e,2),u=s[0],c=s[1],p=function(t){return u+(c-u)*(t-a)/(o-a)};return p.inverse=function(){return i([u,c],[a,o])},p};n["default"]=a,e.exports=n["default"]},{}],198:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},u=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},c=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},p=function(t,e){var n=r(t,2),a=n[0],i=n[1],o=r(e,2),s=o[0],u=o[1];return[a+s,i+u]},l=function(t,e){var n=r(t,2),a=n[0],i=n[1],o=r(e,2),s=o[0],u=o[1];return[a-s,i-u]},f=function(t,e){var n=r(e,2),a=n[0],i=n[1];return[t*a,t*i]},d=function(t){var e=r(t,2),n=e[0],a=e[1];return Math.sqrt(n*n+a*a)},h=function(t){return t.reduce(p,[0,0])},m=function(t){return f(1/t.length,t.reduce(p))},v=function(t,e){return f(t,[Math.sin(e),-Math.cos(e)])},g=function(t,e){var n=t||{};for(var r in n){var a=n[r];e[r]=a(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var r=[],a=t;e>a;a++)r.push(a);return n&&r.push(e),r},y=function(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var u=o.value,c=t[u];n.push(e(u,c))}}catch(p){a=!0,i=p}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n},x=function(t){return y(t,function(t,e){return[t,e]})},_=function(t){return t};n.sum=a,n.min=i,n.max=o,n.sumBy=s,n.minBy=u,n.maxBy=c,n.plus=p,n.minus=l,n.times=f,n.id=_,n.length=d,n.sumVectors=h,n.average=m,n.onCircle=v,n.enhance=g,n.range=b,n.mapObject=y,n.pairs=x,n["default"]={sum:a,min:i,max:o,sumBy:s,minBy:u,maxBy:c,plus:p,minus:l,times:f,id:_,length:d,sumVectors:h,average:m,onCircle:v,enhance:g,range:b,mapObject:y,pairs:x}},{}],199:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},a=function(t,e){var n=r(t,2),a=n[0],i=n[1],o=r(e,2),s=o[0],u=o[1];return a===s&&i===u},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},u=function(t){var e=t.command,n=t.params,r=n.map(function(t){return s(t,6)});return e+" "+r.join(" ")},c=function(t,e){var n=t.command,a=t.params,i=r(e,2),o=i[0],s=i[1];switch(n){case"M":return[a[0],a[1]];case"L":return[a[0],a[1]];case"H":return[a[0],s];case"V":return[o,a[0]];case"Z":return null;case"C":return[a[4],a[5]];case"S":return[a[2],a[3]];case"Q":return[a[2],a[3]];case"T":return[a[0],a[1]];case"A":return[a[5],a[6]]}},p=function(t,e){return function(n){var r="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,r)}},l=function(t){return i(n(e,t))};return{moveto:p(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:p(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:p(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:p(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:p(["x1","y1","x2","y2","x","y"],function(t,e,n,r,a,i){return l({command:"C",params:[t,e,n,r,a,i]})}),smoothcurveto:p(["x2","y2","x","y"],function(t,e,n,r){return l({command:"S",params:[t,e,n,r]})}),qcurveto:p(["x1","y1","x","y"],function(t,e,n,r){return l({command:"Q",params:[t,e,n,r]})}),smoothqcurveto:p(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:p(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,r,a,i,o){return l({command:"A",params:[t,e,n,r,a,i,o]})}),print:function(){return e.map(u).join(" ")},points:function(){var t=[],n=[0,0],r=!0,a=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var u=o.value,p=c(u,n);n=p,p&&t.push(p)}}catch(l){a=!0,i=l}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],r=t.points()[0],o=t.instructions().slice(1);return a(n,r)||o.unshift({command:"L",params:r}),i(this.instructions().concat(o))}}};n["default"]=function(){return a()},e.exports=n["default"]},{}],200:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function a(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1)for(var n=1;n1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var a,i;i=n.shift();)for(a in i)jo.call(i,a)&&(t[a]=i[a]);return t}function a(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===Lo.call(t)}function o(t){return No.test(Lo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function c(t){return t&&"[object Object]"===Lo.call(t)}function p(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];throw t=p(t,n),Error(t)}function f(){jv.DEBUG&&Ao.apply(null,arguments)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=p(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=p(t,n),Ro[t]||(Ro[t]=!0,To(t,n))}function m(){jv.DEBUG&&d.apply(null,arguments)}function v(){jv.DEBUG&&h.apply(null,arguments)}function g(t,e,n){var r=b(t,e,n);return r?r[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function x(t){var e,n,r,a,i,o;for(e=t.split("."),(n=Wo[e.length])||(n=_(e.length)),i=[],r=function(t,n){return t?"*":e[n]},a=n.length;a--;)o=n[a].map(r).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function _(t){var e,n,r,a,i,o,s,u,c="";if(!Wo[t]){for(r=[];c.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)u.push(a(n[o]));r[i]=u}Wo[t]=r}return Wo[t]}function w(t,e,n,r){var a=t[e];if(!a||!a.equalsOrStartsWith(r)&&a.equalsOrStartsWith(n))return t[e]=a?a.replace(n,r):r,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function E(t){return null==t?t:(Ko.hasOwnProperty(t)||(Ko[t]=new Qo(t)),Ko[t])}function S(t,e){function n(e,n){var r,a,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(r=t.viewmodel.wrapped[n.str],a=r?r.get():t.viewmodel.get(n),o=a?Object.keys(a):null),o&&o.forEach(function(t){"_ractive"===t&&i(a)||e.push(n.join(t))}),e}var r,a,o;for(r=e.str.split("."),o=[Yo];a=r.shift();)"*"===a?o=o.reduce(n,[]):o[0]===Yo?o[0]=E(a):o=o.map(C(a));return o}function C(t){return function(e){return e.join(t)}}function P(t){return t?t.replace(Go,".$1"):""}function O(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var r=void 0,a=void 0;if(/\*/.test(e))return a={},S(t,E(P(e))).forEach(function(e){var r=t.viewmodel.get(e);if(!u(r))throw Error(Xo);a[e.str]=r+n}),t.set(a);if(r=t.get(e),!u(r))throw Error(Xo);return t.set(e,+r+n)}function A(t,e){return Jo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=rs[t]}function M(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function j(t,e){for(var n=0,r=t.length;r>n;n++)if(t[n]==e)return!0;return!1}function L(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function N(t){return"string"==typeof t?[t]:void 0===t?[]:t;
-}function R(t){return t[t.length-1]}function F(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function D(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function q(t,e,n,r){var a;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof as)e.then(n,r);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{a=e.then}catch(i){return void r(i)}if("function"==typeof a){var o,s,u;s=function(e){o||(o=!0,q(t,e,n,r))},u=function(t){o||(o=!0,r(t))};try{a.call(e,s,u)}catch(i){if(!o)return r(i),void(o=!0)}}else n(e)}}function U(t,e,n){var r;return e=P(e),"~/"===e.substr(0,2)?(r=E(e.substring(2)),W(t,r.firstKey,n)):"."===e[0]?(r=V(ps(n),e),r&&W(t,r.firstKey,n)):r=z(t,E(e),n),r}function V(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return E(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),E(n.join("."))}return E(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function z(t,e,n,r){var a,i,o,s,u;if(e.isRoot)return e;for(i=e.firstKey;n;)if(a=n.context,n=n.parent,a&&(s=!0,o=t.viewmodel.get(a),o&&("object"==typeof o||"function"==typeof o)&&i in o))return a.join(e.str);return G(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=E(i),u=z(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:u}),e):r||s?void 0:(t.viewmodel.set(e,void 0),e)}function W(t,e){var n;!t.parent||t.isolated||G(t.viewmodel,e)||(e=E(e),(n=z(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function G(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function K(t){t.unbind()}function Q(t){t.unrender()}function $(t){t.cancel()}function Y(t){t.detach()}function J(t){t.detachNodes()}function X(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;ds.ractives.length;)e=ds.ractives.pop(),n=e.viewmodel.applyChanges(),n&&gs.fire(e,n);for(tt(),t=0;t=0;i--)a=t._subs[e[i]],a&&(s=gt(t,a,n,r)&&s);if(zs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=E(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,r)}}function gt(t,e,n,r){var a=null,i=!1;n&&!n._noArg&&(r=[n].concat(r)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,r)===!1&&(i=!0);return n&&!n._noArg&&i&&(a=n.original)&&(a.preventDefault&&a.preventDefault(),a.stopPropagation&&a.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};Ws(this,t,e)}function yt(t){var e;return t=E(P(t)),e=this.viewmodel.get(t,Ks),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function xt(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,_t(this)}function _t(t){$s.fire(t),t.findAllComponents("*").forEach(function(t){_t(t.instance)})}function wt(t,e,n){var r,a;return t=E(P(t)),r=this.viewmodel.get(t),i(r)&&i(e)?(a=bs.start(this,!0),this.viewmodel.merge(t,r,e,n),bs.end(),a):this.set(t,e,n&&n.complete)}function kt(t,e){var n,r;return n=S(t,e),r={},n.forEach(function(e){r[e.str]=t.get(e.str)}),r}function Et(t,e,n,r){var a,i,o;e=E(P(e)),r=r||pu,e.isPattern?(a=new uu(t,e,n,r),t.viewmodel.patternObservers.push(a),i=!0):a=new Zs(t,e,n,r),a.init(r.init),t.viewmodel.register(e,a,i?"patternObservers":"observers"),a.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(a),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,a,"patternObservers")):t.viewmodel.unregister(e,a,"observers"),o=!0)}};return t._observers.push(s),s}function St(t,e,n){var r,a,i,o;if(c(t)){n=e,a=t,r=[];for(t in a)a.hasOwnProperty(t)&&(e=a[t],r.push(this.observe(t,e,n)));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",cu(this,t,e,n);if(i=t.split(" "),1===i.length)return cu(this,t,e,n);for(r=[],o=i.length;o--;)t=i[o],t&&r.push(cu(this,t,e,n));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}function Ct(t,e,n){var r=this.observe(t,function(){e.apply(this,arguments),r.cancel()},{init:!1,defer:n&&n.defer});return r}function Pt(t,e){var n,r=this;if(t)n=t.split(" ").map(du).filter(hu),n.forEach(function(t){var n,a;(n=r._subs[t])&&(e?(a=n.indexOf(e),-1!==a&&n.splice(a,1)):r._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function Ot(t,e){var n,r,a,i=this;if("object"==typeof t){n=[];for(r in t)t.hasOwnProperty(r)&&n.push(this.on(r,t[r]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return a=t.split(" ").map(du).filter(hu),a.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function At(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var r,a,i,o,s,u,c=[];if(r=Mt(t,e,n),!r)return null;for(a=t.length,s=r.length-2-r[1],i=Math.min(a,r[0]),o=i+r[1],u=0;i>u;u+=1)c.push(u);for(;o>u;u+=1)c.push(-1);for(;a>u;u+=1)c.push(u+s);return 0!==s?c.touchedFrom=r[0]:c.touchedFrom=t.length,c}function Mt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function jt(e,n){var r,a,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),r=bs.start(this,!0),bs.scheduleTask(function(){return Mu.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Lt(s),e.innerHTML=""}return this.cssId&&Au.apply(),e&&((a=e.__ractive_instances__)?a.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,r.then(function(){return ju.fire(o)})}function Lt(t){t.splice(0,t.length).forEach(H)}function Nt(t,e){for(var n=t.slice(),r=e.length;r--;)~n.indexOf(e[r])||n.push(e[r]);return n}function Rt(t,e){var n,r,a;return r='[data-ractive-css~="{'+e+'}"]',a=function(t){var e,n,a,i,o,s,u,c=[];for(e=[];n=Iu.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Dt),u=e.length;u--;)s=i.slice(),a=e[u],s[u]=a.base+r+a.modifiers||"",o=i.slice(),o[u]=r+" "+o[u],c.push(s.join(" "),o.join(" "));return c.join(", ")},n=qu.test(t)?t.replace(qu,r):t.replace(Du,"").replace(Fu,function(t,e){var n,r;return Bu.test(e)?t:(n=e.split(",").map(Ft),r=n.map(a).join(", ")+" ",t.replace(e,r))})}function Ft(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Dt(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,r="function"==typeof e;return e||n||(e={}),n||r?function(){var a=r?qt(e,this):e,i=n?qt(t,this):t;return Ut(a,i)}:Ut(e,t)}function qt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Ut(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Vt(t){var e=Eo(Qu);return e.parse=function(e,n){return zt(e,n||t)},e}function zt(t,e){if(!Hu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hu(t,e||this.options)}function Wt(t,e){var n;if(!Xi){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Gt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a i;)p(a,r=t[i++])&&(~P(o,r)||o.push(r));return o}},B=function(){};i(i.S,"Object",{getPrototypeOf:a.getProto=a.getProto||function(t){return t=g(t),p(t,k)?t[k]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?C:null},getOwnPropertyNames:a.getNames=a.getNames||I(N,N.length,!0),create:a.create=a.create||function(t,e){var n;return null!==t?(B.prototype=h(t),n=new B,B.prototype=null,n[k]=t):n=D(),void 0===e?n:R(n,e)},keys:a.getKeys=a.getKeys||I(L,F,!1)});var q=function(t,e,n){if(!(e in j)){for(var r=[],a=0;e>a;a++)r[a]="a["+a+"]";j[e]=Function("F,a","return new F("+r.join(",")+")")}return j[e](t,n)};i(i.P,"Function",{bind:function(t){var e=m(this),n=O.call(arguments,1),r=function(){var a=n.concat(O.call(arguments));return this instanceof r?q(e,a.length,a):f(e,a,t)};return v(e.prototype)&&(r.prototype=e.prototype),r}}),i(i.P+i.F*d(function(){u&&O.call(u)}),"Array",{slice:function(t,e){var n=_(this.length),r=l(this);if(e=void 0===e?n:e,"Array"==r)return O.call(this,t,e);for(var a=x(t,n),i=x(e,n),o=_(i-a),s=Array(o),u=0;o>u;u++)s[u]="String"==r?this.charAt(a+u):this[a+u];return s}}),i(i.P+i.F*(w!=Object),"Array",{join:function(t){return A.call(w(this),void 0===t?",":t)}}),i(i.S,"Array",{isArray:t(36)});var V=function(t){return function(e,n){m(e);var r=w(this),a=_(r.length),i=t?a-1:0,o=t?-1:1;if(arguments.length<2)for(;;){if(i in r){n=r[i],i+=o;break}if(i+=o,t?0>i:i>=a)throw TypeError("Reduce of empty array with no initial value")}for(;t?i>=0:a>i;i+=o)i in r&&(n=e(n,r[i],i,this));return n}},U=function(t){return function(e){return t(this,e,arguments[1])}};i(i.P,"Array",{forEach:a.each=a.each||U(E(0)),map:U(E(1)),filter:U(E(2)),some:U(E(3)),every:U(E(4)),reduce:V(!1),reduceRight:V(!0),indexOf:U(P),lastIndexOf:function(t,e){var n=b(this),r=_(n.length),a=r-1;for(arguments.length>1&&(a=Math.min(a,y(e))),0>a&&(a=_(r+a));a>=0;a--)if(a in n&&n[a]===t)return a;return-1}}),i(i.S,"Date",{now:function(){return+new Date}});var z=function(t){return t>9?t:"0"+t};i(i.P+i.F*(d(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!d(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(this))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),r=0>e?"-":e>9999?"+":"";return r+("00000"+Math.abs(e)).slice(r?-6:-4)+"-"+z(t.getUTCMonth()+1)+"-"+z(t.getUTCDate())+"T"+z(t.getUTCHours())+":"+z(t.getUTCMinutes())+":"+z(t.getUTCSeconds())+"."+(n>99?n:"0"+z(n))+"Z"}})},{11:11,19:19,2:2,20:20,22:22,24:24,30:30,32:32,33:33,34:34,36:36,38:38,4:4,46:46,59:59,7:7,76:76,77:77,78:78,79:79,8:8,80:80,82:82}],86:[function(t,e,n){var r=t(22);r(r.P,"Array",{copyWithin:t(5)}),t(3)("copyWithin")},{22:22,3:3,5:5}],87:[function(t,e,n){var r=t(22);r(r.P,"Array",{fill:t(6)}),t(3)("fill")},{22:22,3:3,6:6}],88:[function(t,e,n){"use strict";var r=t(22),a=t(8)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),r(r.P+r.F*o,"Array",{findIndex:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],89:[function(t,e,n){"use strict";var r=t(22),a=t(8)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),r(r.P+r.F*o,"Array",{find:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],90:[function(t,e,n){"use strict";var r=t(17),a=t(22),i=t(80),o=t(40),s=t(35),u=t(79),c=t(84);a(a.S+a.F*!t(43)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,a,p,l=i(t),f="function"==typeof this?this:Array,d=arguments,h=d.length,m=h>1?d[1]:void 0,v=void 0!==m,g=0,b=c(l);if(v&&(m=r(m,h>2?d[2]:void 0,2)),void 0==b||f==Array&&s(b))for(e=u(l.length),n=new f(e);e>g;g++)n[g]=v?m(l[g],g):l[g];else for(p=b.call(l),n=new f;!(a=p.next()).done;g++)n[g]=v?o(p,m,[a.value,g],!0):a.value;return n.length=g,n}})},{17:17,22:22,35:35,40:40,43:43,79:79,80:80,84:84}],91:[function(t,e,n){"use strict";var r=t(3),a=t(44),i=t(45),o=t(78);e.exports=t(42)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,a(1)):"keys"==e?a(0,n):"values"==e?a(0,t[n]):a(0,[n,t[n]])},"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},{3:3,42:42,44:44,45:45,78:78}],92:[function(t,e,n){"use strict";var r=t(22);r(r.S+r.F*t(24)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments,n=e.length,r=new("function"==typeof this?this:Array)(n);n>t;)r[t]=e[t++];return r.length=n,r}})},{22:22,24:24}],93:[function(t,e,n){t(65)("Array")},{65:65}],94:[function(t,e,n){"use strict";var r=t(46),a=t(38),i=t(83)("hasInstance"),o=Function.prototype;i in o||r.setDesc(o,i,{value:function(t){if("function"!=typeof this||!a(t))return!1;if(!a(this.prototype))return t instanceof this;for(;t=r.getProto(t);)if(this.prototype===t)return!0;return!1}})},{38:38,46:46,83:83}],95:[function(t,e,n){var r=t(46).setDesc,a=t(59),i=t(30),o=Function.prototype,s=/^\s*function ([^ (]*)/,u="name";u in o||t(19)&&r(o,u,{configurable:!0,get:function(){var t=(""+this).match(s),e=t?t[1]:"";return i(this,u)||r(this,u,a(5,e)),e}})},{19:19,30:30,46:46,59:59}],96:[function(t,e,n){"use strict";var r=t(12);t(15)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=r.getEntry(this,t);return e&&e.v},set:function(t,e){return r.def(this,0===t?0:t,e)}},r,!0)},{12:12,15:15}],97:[function(t,e,n){var r=t(22),a=t(50),i=Math.sqrt,o=Math.acosh;r(r.S+r.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:a(t-1+i(t-1)*i(t+1))}})},{22:22,50:50}],98:[function(t,e,n){function r(t){return isFinite(t=+t)&&0!=t?0>t?-r(-t):Math.log(t+Math.sqrt(t*t+1)):t}var a=t(22);a(a.S,"Math",{asinh:r})},{22:22}],99:[function(t,e,n){var r=t(22);r(r.S,"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{22:22}],100:[function(t,e,n){var r=t(22),a=t(51);r(r.S,"Math",{cbrt:function(t){return a(t=+t)*Math.pow(Math.abs(t),1/3)}})},{22:22,51:51}],101:[function(t,e,n){var r=t(22);r(r.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{22:22}],102:[function(t,e,n){var r=t(22),a=Math.exp;r(r.S,"Math",{cosh:function(t){return(a(t=+t)+a(-t))/2}})},{22:22}],103:[function(t,e,n){var r=t(22);r(r.S,"Math",{expm1:t(49)})},{22:22,49:49}],104:[function(t,e,n){var r=t(22),a=t(51),i=Math.pow,o=i(2,-52),s=i(2,-23),u=i(2,127)*(2-s),c=i(2,-126),p=function(t){return t+1/o-1/o};r(r.S,"Math",{fround:function(t){var e,n,r=Math.abs(t),i=a(t);return c>r?i*p(r/c/s)*c*s:(e=(1+s/o)*r,n=e-(e-r),n>u||n!=n?i*(1/0):i*n)}})},{22:22,51:51}],105:[function(t,e,n){var r=t(22),a=Math.abs;r(r.S,"Math",{hypot:function(t,e){for(var n,r,i=0,o=0,s=arguments,u=s.length,c=0;u>o;)n=a(s[o++]),n>c?(r=c/n,i=i*r*r+1,c=n):n>0?(r=n/c,i+=r*r):i+=n;return c===1/0?1/0:c*Math.sqrt(i)}})},{22:22}],106:[function(t,e,n){var r=t(22),a=Math.imul;r(r.S+r.F*t(24)(function(){return-5!=a(4294967295,5)||2!=a.length}),"Math",{imul:function(t,e){var n=65535,r=+t,a=+e,i=n&r,o=n&a;return 0|i*o+((n&r>>>16)*o+i*(n&a>>>16)<<16>>>0)}})},{22:22,24:24}],107:[function(t,e,n){var r=t(22);r(r.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},{22:22}],108:[function(t,e,n){var r=t(22);r(r.S,"Math",{log1p:t(50)})},{22:22,50:50}],109:[function(t,e,n){var r=t(22);r(r.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{22:22}],110:[function(t,e,n){var r=t(22);r(r.S,"Math",{sign:t(51)})},{22:22,51:51}],111:[function(t,e,n){var r=t(22),a=t(49),i=Math.exp;r(r.S+r.F*t(24)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(a(t)-a(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{22:22,24:24,49:49}],112:[function(t,e,n){var r=t(22),a=t(49),i=Math.exp;r(r.S,"Math",{tanh:function(t){var e=a(t=+t),n=a(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{22:22,49:49}],113:[function(t,e,n){var r=t(22);r(r.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{22:22}],114:[function(t,e,n){"use strict";var r=t(46),a=t(29),i=t(30),o=t(11),s=t(81),u=t(24),c=t(74).trim,p="Number",l=a[p],f=l,d=l.prototype,h=o(r.create(d))==p,m="trim"in String.prototype,v=function(t){
+var e=s(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():c(e,3);var n,r,a,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:r=2,a=49;break;case 79:case 111:r=8,a=55;break;default:return+e}for(var o,u=e.slice(2),p=0,l=u.length;l>p;p++)if(o=u.charCodeAt(p),48>o||o>a)return NaN;return parseInt(u,r)}}return+e};l(" 0o1")&&l("0b1")&&!l("+0x1")||(l=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof l&&(h?u(function(){d.valueOf.call(n)}):o(n)!=p)?new f(v(e)):v(e)},r.each.call(t(19)?r.getNames(f):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),function(t){i(f,t)&&!i(l,t)&&r.setDesc(l,t,r.getDesc(f,t))}),l.prototype=d,d.constructor=l,t(61)(a,p,l))},{11:11,19:19,24:24,29:29,30:30,46:46,61:61,74:74,81:81}],115:[function(t,e,n){var r=t(22);r(r.S,"Number",{EPSILON:Math.pow(2,-52)})},{22:22}],116:[function(t,e,n){var r=t(22),a=t(29).isFinite;r(r.S,"Number",{isFinite:function(t){return"number"==typeof t&&a(t)}})},{22:22,29:29}],117:[function(t,e,n){var r=t(22);r(r.S,"Number",{isInteger:t(37)})},{22:22,37:37}],118:[function(t,e,n){var r=t(22);r(r.S,"Number",{isNaN:function(t){return t!=t}})},{22:22}],119:[function(t,e,n){var r=t(22),a=t(37),i=Math.abs;r(r.S,"Number",{isSafeInteger:function(t){return a(t)&&i(t)<=9007199254740991}})},{22:22,37:37}],120:[function(t,e,n){var r=t(22);r(r.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{22:22}],121:[function(t,e,n){var r=t(22);r(r.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{22:22}],122:[function(t,e,n){var r=t(22);r(r.S,"Number",{parseFloat:parseFloat})},{22:22}],123:[function(t,e,n){var r=t(22);r(r.S,"Number",{parseInt:parseInt})},{22:22}],124:[function(t,e,n){var r=t(22);r(r.S+r.F,"Object",{assign:t(53)})},{22:22,53:53}],125:[function(t,e,n){var r=t(38);t(54)("freeze",function(t){return function(e){return t&&r(e)?t(e):e}})},{38:38,54:54}],126:[function(t,e,n){var r=t(78);t(54)("getOwnPropertyDescriptor",function(t){return function(e,n){return t(r(e),n)}})},{54:54,78:78}],127:[function(t,e,n){t(54)("getOwnPropertyNames",function(){return t(28).get})},{28:28,54:54}],128:[function(t,e,n){var r=t(80);t(54)("getPrototypeOf",function(t){return function(e){return t(r(e))}})},{54:54,80:80}],129:[function(t,e,n){var r=t(38);t(54)("isExtensible",function(t){return function(e){return r(e)?t?t(e):!0:!1}})},{38:38,54:54}],130:[function(t,e,n){var r=t(38);t(54)("isFrozen",function(t){return function(e){return r(e)?t?t(e):!1:!0}})},{38:38,54:54}],131:[function(t,e,n){var r=t(38);t(54)("isSealed",function(t){return function(e){return r(e)?t?t(e):!1:!0}})},{38:38,54:54}],132:[function(t,e,n){var r=t(22);r(r.S,"Object",{is:t(63)})},{22:22,63:63}],133:[function(t,e,n){var r=t(80);t(54)("keys",function(t){return function(e){return t(r(e))}})},{54:54,80:80}],134:[function(t,e,n){var r=t(38);t(54)("preventExtensions",function(t){return function(e){return t&&r(e)?t(e):e}})},{38:38,54:54}],135:[function(t,e,n){var r=t(38);t(54)("seal",function(t){return function(e){return t&&r(e)?t(e):e}})},{38:38,54:54}],136:[function(t,e,n){var r=t(22);r(r.S,"Object",{setPrototypeOf:t(64).set})},{22:22,64:64}],137:[function(t,e,n){"use strict";var r=t(10),a={};a[t(83)("toStringTag")]="z",a+""!="[object z]"&&t(61)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},{10:10,61:61,83:83}],138:[function(t,e,n){"use strict";var r,a=t(46),i=t(48),o=t(29),s=t(17),u=t(10),c=t(22),p=t(38),l=t(4),f=t(2),d=t(69),h=t(27),m=t(64).set,v=t(63),g=t(83)("species"),b=t(68),y=t(52),x="Promise",_=o.process,w="process"==u(_),k=o[x],E=function(){},P=function(t){var e,n=new k(E);return t&&(n.constructor=function(t){t(E,E)}),(e=k.resolve(n))["catch"](E),e===n},C=function(){function e(t){var n=new k(t);return m(n,e.prototype),n}var n=!1;try{if(n=k&&k.resolve&&P(),m(e,k),e.prototype=a.create(k.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(n=!1),n&&t(19)){var r=!1;k.resolve(a.setDesc({},"then",{get:function(){r=!0}})),n=r}}catch(i){n=!1}return n}(),S=function(t,e){return i&&t===k&&e===r?!0:v(t,e)},O=function(t){var e=l(t)[g];return void 0!=e?e:t},A=function(t){var e;return p(t)&&"function"==typeof(e=t.then)?e:!1},T=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r}),this.resolve=f(e),this.reject=f(n)},M=function(t){try{t()}catch(e){return{error:e}}},R=function(t,e){if(!t.n){t.n=!0;var n=t.c;y(function(){for(var r=t.v,a=1==t.s,i=0,s=function(e){var n,i,o=a?e.ok:e.fail,s=e.resolve,u=e.reject;try{o?(a||(t.h=!0),n=o===!0?r:o(r),n===e.promise?u(TypeError("Promise-chain cycle")):(i=A(n))?i.call(n,s,u):s(n)):u(r)}catch(c){u(c)}};n.length>i;)s(n[i++]);n.length=0,t.n=!1,e&&setTimeout(function(){var e,n,a=t.p;j(a)&&(w?_.emit("unhandledRejection",r,a):(e=o.onunhandledrejection)?e({promise:a,reason:r}):(n=o.console)&&n.error&&n.error("Unhandled promise rejection",r)),t.a=void 0},1)})}},j=function(t){var e,n=t._d,r=n.a||n.c,a=0;if(n.h)return!1;for(;r.length>a;)if(e=r[a++],e.fail||!j(e.promise))return!1;return!0},L=function(t){var e=this;e.d||(e.d=!0,e=e.r||e,e.v=t,e.s=2,e.a=e.c.slice(),R(e,!0))},N=function(t){var e,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===t)throw TypeError("Promise can't be resolved itself");(e=A(t))?y(function(){var r={r:n,d:!1};try{e.call(t,s(N,r,1),s(L,r,1))}catch(a){L.call(r,a)}}):(n.v=t,n.s=1,R(n,!1))}catch(r){L.call({r:n,d:!1},r)}}};C||(k=function(t){f(t);var e=this._d={p:d(this,k,x),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(s(N,e,1),s(L,e,1))}catch(n){L.call(e,n)}},t(60)(k.prototype,{then:function(t,e){var n=new T(b(this,k)),r=n.promise,a=this._d;return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,a.c.push(n),a.a&&a.a.push(n),a.s&&R(a,!1),r},"catch":function(t){return this.then(void 0,t)}})),c(c.G+c.W+c.F*!C,{Promise:k}),t(66)(k,x),t(65)(x),r=t(16)[x],c(c.S+c.F*!C,x,{reject:function(t){var e=new T(this),n=e.reject;return n(t),e.promise}}),c(c.S+c.F*(!C||P(!0)),x,{resolve:function(t){if(t instanceof k&&S(t.constructor,this))return t;var e=new T(this),n=e.resolve;return n(t),e.promise}}),c(c.S+c.F*!(C&&t(43)(function(t){k.all(t)["catch"](function(){})})),x,{all:function(t){var e=O(this),n=new T(e),r=n.resolve,i=n.reject,o=[],s=M(function(){h(t,!1,o.push,o);var n=o.length,s=Array(n);n?a.each.call(o,function(t,a){var o=!1;e.resolve(t).then(function(t){o||(o=!0,s[a]=t,--n||r(s))},i)}):r(s)});return s&&i(s.error),n.promise},race:function(t){var e=O(this),n=new T(e),r=n.reject,a=M(function(){h(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return a&&r(a.error),n.promise}})},{10:10,16:16,17:17,19:19,2:2,22:22,27:27,29:29,38:38,4:4,43:43,46:46,48:48,52:52,60:60,63:63,64:64,65:65,66:66,68:68,69:69,83:83}],139:[function(t,e,n){var r=t(22),a=Function.apply,i=t(4);r(r.S,"Reflect",{apply:function(t,e,n){return a.call(t,e,i(n))}})},{22:22,4:4}],140:[function(t,e,n){var r=t(46),a=t(22),i=t(2),o=t(4),s=t(38),u=Function.bind||t(16).Function.prototype.bind;a(a.S+a.F*t(24)(function(){function t(){}return!(Reflect.construct(function(){},[],t)instanceof t)}),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var a=[null];return a.push.apply(a,e),new(u.apply(t,a))}var c=n.prototype,p=r.create(s(c)?c:Object.prototype),l=Function.apply.call(t,p,e);return s(l)?l:p}})},{16:16,2:2,22:22,24:24,38:38,4:4,46:46}],141:[function(t,e,n){var r=t(46),a=t(22),i=t(4);a(a.S+a.F*t(24)(function(){Reflect.defineProperty(r.setDesc({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t);try{return r.setDesc(t,e,n),!0}catch(a){return!1}}})},{22:22,24:24,4:4,46:46}],142:[function(t,e,n){var r=t(22),a=t(46).getDesc,i=t(4);r(r.S,"Reflect",{deleteProperty:function(t,e){var n=a(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{22:22,4:4,46:46}],143:[function(t,e,n){"use strict";var r=t(22),a=t(4),i=function(t){this._t=a(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(41)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),r(r.S,"Reflect",{enumerate:function(t){return new i(t)}})},{22:22,4:4,41:41}],144:[function(t,e,n){var r=t(46),a=t(22),i=t(4);a(a.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return r.getDesc(i(t),e)}})},{22:22,4:4,46:46}],145:[function(t,e,n){var r=t(22),a=t(46).getProto,i=t(4);r(r.S,"Reflect",{getPrototypeOf:function(t){return a(i(t))}})},{22:22,4:4,46:46}],146:[function(t,e,n){function r(t,e){var n,o,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(n=a.getDesc(t,e))?i(n,"value")?n.value:void 0!==n.get?n.get.call(c):void 0:s(o=a.getProto(t))?r(o,e,c):void 0}var a=t(46),i=t(30),o=t(22),s=t(38),u=t(4);o(o.S,"Reflect",{get:r})},{22:22,30:30,38:38,4:4,46:46}],147:[function(t,e,n){var r=t(22);r(r.S,"Reflect",{has:function(t,e){return e in t}})},{22:22}],148:[function(t,e,n){var r=t(22),a=t(4),i=Object.isExtensible;r(r.S,"Reflect",{isExtensible:function(t){return a(t),i?i(t):!0}})},{22:22,4:4}],149:[function(t,e,n){var r=t(22);r(r.S,"Reflect",{ownKeys:t(56)})},{22:22,56:56}],150:[function(t,e,n){var r=t(22),a=t(4),i=Object.preventExtensions;r(r.S,"Reflect",{preventExtensions:function(t){a(t);try{return i&&i(t),!0}catch(e){return!1}}})},{22:22,4:4}],151:[function(t,e,n){var r=t(22),a=t(64);a&&r(r.S,"Reflect",{setPrototypeOf:function(t,e){a.check(t,e);try{return a.set(t,e),!0}catch(n){return!1}}})},{22:22,64:64}],152:[function(t,e,n){function r(t,e,n){var o,p,l=arguments.length<4?t:arguments[3],f=a.getDesc(u(t),e);if(!f){if(c(p=a.getProto(t)))return r(p,e,n,l);f=s(0)}return i(f,"value")?f.writable!==!1&&c(l)?(o=a.getDesc(l,e)||s(0),o.value=n,a.setDesc(l,e,o),!0):!1:void 0===f.set?!1:(f.set.call(l,n),!0)}var a=t(46),i=t(30),o=t(22),s=t(59),u=t(4),c=t(38);o(o.S,"Reflect",{set:r})},{22:22,30:30,38:38,4:4,46:46,59:59}],153:[function(t,e,n){var r=t(46),a=t(29),i=t(39),o=t(26),s=a.RegExp,u=s,c=s.prototype,p=/a/g,l=/a/g,f=new s(p)!==p;!t(19)||f&&!t(24)(function(){return l[t(83)("match")]=!1,s(p)!=p||s(l)==l||"/a/i"!=s(p,"i")})||(s=function(t,e){var n=i(t),r=void 0===e;return this instanceof s||!n||t.constructor!==s||!r?f?new u(n&&!r?t.source:t,e):u((n=t instanceof s)?t.source:t,n&&r?o.call(t):e):t},r.each.call(r.getNames(u),function(t){t in s||r.setDesc(s,t,{configurable:!0,get:function(){return u[t]},set:function(e){u[t]=e}})}),c.constructor=s,s.prototype=c,t(61)(a,"RegExp",s)),t(65)("RegExp")},{19:19,24:24,26:26,29:29,39:39,46:46,61:61,65:65,83:83}],154:[function(t,e,n){var r=t(46);t(19)&&"g"!=/./g.flags&&r.setDesc(RegExp.prototype,"flags",{configurable:!0,get:t(26)})},{19:19,26:26,46:46}],155:[function(t,e,n){t(25)("match",1,function(t,e){return function(n){"use strict";var r=t(this),a=void 0==n?void 0:n[e];return void 0!==a?a.call(n,r):RegExp(n)[e](r+"")}})},{25:25}],156:[function(t,e,n){t(25)("replace",2,function(t,e,n){return function(r,a){"use strict";var i=t(this),o=void 0==r?void 0:r[e];return void 0!==o?o.call(r,i,a):n.call(i+"",r,a)}})},{25:25}],157:[function(t,e,n){t(25)("search",1,function(t,e){return function(n){"use strict";var r=t(this),a=void 0==n?void 0:n[e];return void 0!==a?a.call(n,r):RegExp(n)[e](r+"")}})},{25:25}],158:[function(t,e,n){t(25)("split",2,function(t,e,n){return function(r,a){"use strict";var i=t(this),o=void 0==r?void 0:r[e];return void 0!==o?o.call(r,i,a):n.call(i+"",r,a)}})},{25:25}],159:[function(t,e,n){"use strict";var r=t(12);t(15)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t=0===t?0:t,t)}},r)},{12:12,15:15}],160:[function(t,e,n){"use strict";var r=t(22),a=t(70)(!1);r(r.P,"String",{codePointAt:function(t){return a(this,t)}})},{22:22,70:70}],161:[function(t,e,n){"use strict";var r=t(22),a=t(79),i=t(71),o="endsWith",s=""[o];r(r.P+r.F*t(23)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments,r=n.length>1?n[1]:void 0,u=a(e.length),c=void 0===r?u:Math.min(a(r),u),p=t+"";return s?s.call(e,p,c):e.slice(c-p.length,c)===p}})},{22:22,23:23,71:71,79:79}],162:[function(t,e,n){var r=t(22),a=t(76),i=String.fromCharCode,o=String.fromCodePoint;r(r.S+r.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],r=arguments,o=r.length,s=0;o>s;){if(e=+r[s++],a(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{22:22,76:76}],163:[function(t,e,n){"use strict";var r=t(22),a=t(71),i="includes";r(r.P+r.F*t(23)(i),"String",{includes:function(t){return!!~a(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{22:22,23:23,71:71}],164:[function(t,e,n){"use strict";var r=t(70)(!0);t(42)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},{42:42,70:70}],165:[function(t,e,n){var r=t(22),a=t(78),i=t(79);r(r.S,"String",{raw:function(t){for(var e=a(t.raw),n=i(e.length),r=arguments,o=r.length,s=[],u=0;n>u;)s.push(e[u++]+""),o>u&&s.push(r[u]+"");return s.join("")}})},{22:22,78:78,79:79}],166:[function(t,e,n){var r=t(22);r(r.P,"String",{repeat:t(73)})},{22:22,73:73}],167:[function(t,e,n){"use strict";var r=t(22),a=t(79),i=t(71),o="startsWith",s=""[o];r(r.P+r.F*t(23)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=arguments,r=a(Math.min(n.length>1?n[1]:void 0,e.length)),u=t+"";return s?s.call(e,u,r):e.slice(r,r+u.length)===u}})},{22:22,23:23,71:71,79:79}],168:[function(t,e,n){"use strict";t(74)("trim",function(t){return function(){return t(this,3)}})},{74:74}],169:[function(t,e,n){"use strict";var r=t(46),a=t(29),i=t(30),o=t(19),s=t(22),u=t(61),c=t(24),p=t(67),l=t(66),f=t(82),d=t(83),h=t(47),m=t(28),v=t(21),g=t(36),b=t(4),y=t(78),x=t(59),_=r.getDesc,w=r.setDesc,k=r.create,E=m.get,P=a.Symbol,C=a.JSON,S=C&&C.stringify,O=!1,A=d("_hidden"),T=r.isEnum,M=p("symbol-registry"),R=p("symbols"),j="function"==typeof P,L=Object.prototype,N=o&&c(function(){return 7!=k(w({},"a",{get:function(){return w(this,"a",{value:7}).a}})).a})?function(t,e,n){var r=_(L,e);r&&delete L[e],w(t,e,n),r&&t!==L&&w(L,e,r)}:w,F=function(t){var e=R[t]=k(P.prototype);return e._k=t,o&&O&&N(L,t,{configurable:!0,set:function(e){i(this,A)&&i(this[A],t)&&(this[A][t]=!1),N(this,t,x(1,e))}}),e},D=function(t){return"symbol"==typeof t},I=function(t,e,n){return n&&i(R,e)?(n.enumerable?(i(t,A)&&t[A][e]&&(t[A][e]=!1),n=k(n,{enumerable:x(0,!1)})):(i(t,A)||w(t,A,x(1,{})),t[A][e]=!0),N(t,e,n)):w(t,e,n)},B=function(t,e){b(t);for(var n,r=v(e=y(e)),a=0,i=r.length;i>a;)I(t,n=r[a++],e[n]);return t},q=function(t,e){return void 0===e?k(t):B(k(t),e)},V=function(t){var e=T.call(this,t);return e||!i(this,t)||!i(R,t)||i(this,A)&&this[A][t]?e:!0},U=function(t,e){var n=_(t=y(t),e);return!n||!i(R,e)||i(t,A)&&t[A][e]||(n.enumerable=!0),n},z=function(t){for(var e,n=E(y(t)),r=[],a=0;n.length>a;)i(R,e=n[a++])||e==A||r.push(e);return r},G=function(t){for(var e,n=E(y(t)),r=[],a=0;n.length>a;)i(R,e=n[a++])&&r.push(R[e]);return r},W=function(t){if(void 0!==t&&!D(t)){for(var e,n,r=[t],a=1,i=arguments;i.length>a;)r.push(i[a++]);return e=r[1],"function"==typeof e&&(n=e),(n||!g(e))&&(e=function(t,e){return n&&(e=n.call(this,t,e)),D(e)?void 0:e}),r[1]=e,S.apply(C,r)}},H=c(function(){var t=P();return"[null]"!=S([t])||"{}"!=S({a:t})||"{}"!=S(Object(t))});j||(P=function(){if(D(this))throw TypeError("Symbol is not a constructor");return F(f(arguments.length>0?arguments[0]:void 0))},u(P.prototype,"toString",function(){return this._k}),D=function(t){return t instanceof P},r.create=q,r.isEnum=V,r.getDesc=U,r.setDesc=I,r.setDescs=B,r.getNames=m.get=z,r.getSymbols=G,o&&!t(48)&&u(L,"propertyIsEnumerable",V,!0));var Q={"for":function(t){return i(M,t+="")?M[t]:M[t]=P(t)},keyFor:function(t){return h(M,t)},useSetter:function(){O=!0},useSimple:function(){O=!1}};r.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(t){var e=d(t);Q[t]=j?e:F(e)}),O=!0,s(s.G+s.W,{Symbol:P}),s(s.S,"Symbol",Q),s(s.S+s.F*!j,"Object",{create:q,defineProperty:I,defineProperties:B,getOwnPropertyDescriptor:U,getOwnPropertyNames:z,getOwnPropertySymbols:G}),C&&s(s.S+s.F*(!j||H),"JSON",{stringify:W}),l(P,"Symbol"),l(Math,"Math",!0),l(a.JSON,"JSON",!0)},{19:19,21:21,22:22,24:24,28:28,29:29,30:30,36:36,4:4,46:46,47:47,48:48,59:59,61:61,66:66,67:67,78:78,82:82,83:83}],170:[function(t,e,n){"use strict";var r=t(46),a=t(61),i=t(14),o=t(38),s=t(30),u=i.frozenStore,c=i.WEAK,p=Object.isExtensible||o,l={},f=t(15)("WeakMap",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){if(o(t)){if(!p(t))return u(this).get(t);if(s(t,c))return t[c][this._i]}},set:function(t,e){return i.def(this,t,e)}},i,!0,!0);7!=(new f).set((Object.freeze||Object)(l),7).get(l)&&r.each.call(["delete","has","get","set"],function(t){var e=f.prototype,n=e[t];a(e,t,function(e,r){if(o(e)&&!p(e)){var a=u(this)[t](e,r);return"set"==t?this:a}return n.call(this,e,r)})})},{14:14,15:15,30:30,38:38,46:46,61:61}],171:[function(t,e,n){"use strict";var r=t(14);t(15)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return r.def(this,t,!0)}},r,!1,!0)},{14:14,15:15}],172:[function(t,e,n){"use strict";var r=t(22),a=t(7)(!0);r(r.P,"Array",{includes:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)("includes")},{22:22,3:3,7:7}],173:[function(t,e,n){var r=t(22);r(r.P,"Map",{toJSON:t(13)("Map")})},{13:13,22:22}],174:[function(t,e,n){var r=t(22),a=t(55)(!0);r(r.S,"Object",{entries:function(t){return a(t)}})},{22:22,55:55}],175:[function(t,e,n){var r=t(46),a=t(22),i=t(56),o=t(78),s=t(59);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=o(t),u=r.setDesc,c=r.getDesc,p=i(a),l={},f=0;p.length>f;)n=c(a,e=p[f++]),e in l?u(l,e,s(0,n)):l[e]=n;return l}})},{22:22,46:46,56:56,59:59,78:78}],176:[function(t,e,n){var r=t(22),a=t(55)(!1);r(r.S,"Object",{values:function(t){return a(t)}})},{22:22,55:55}],177:[function(t,e,n){var r=t(22),a=t(62)(/[\\^$*+?.()|[\]{}]/g,"\\$&");r(r.S,"RegExp",{escape:function(t){return a(t)}})},{22:22,62:62}],178:[function(t,e,n){var r=t(22);r(r.P,"Set",{toJSON:t(13)("Set")})},{13:13,22:22}],179:[function(t,e,n){"use strict";var r=t(22),a=t(70)(!0);r(r.P,"String",{at:function(t){return a(this,t)}})},{22:22,70:70}],180:[function(t,e,n){"use strict";var r=t(22),a=t(72);r(r.P,"String",{padLeft:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{22:22,72:72}],181:[function(t,e,n){"use strict";var r=t(22),a=t(72);r(r.P,"String",{padRight:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},{22:22,72:72}],182:[function(t,e,n){"use strict";t(74)("trimLeft",function(t){return function(){return t(this,1)}})},{74:74}],183:[function(t,e,n){"use strict";t(74)("trimRight",function(t){return function(){return t(this,2)}})},{74:74}],184:[function(t,e,n){var r=t(46),a=t(22),i=t(17),o=t(16).Array||Array,s={},u=function(t,e){r.each.call(t.split(","),function(t){void 0==e&&t in o?s[t]=o[t]:t in[]&&(s[t]=i(Function.call,[][t],e))})};u("pop,reverse,shift,keys,values,entries",1),u("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),u("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),a(a.S,"Array",s)},{16:16,17:17,22:22,46:46}],185:[function(t,e,n){t(91);var r=t(29),a=t(31),i=t(45),o=t(83)("iterator"),s=r.NodeList,u=r.HTMLCollection,c=s&&s.prototype,p=u&&u.prototype,l=i.NodeList=i.HTMLCollection=i.Array;c&&!c[o]&&a(c,o,l),p&&!p[o]&&a(p,o,l)},{29:29,31:31,45:45,83:83,91:91}],186:[function(t,e,n){var r=t(22),a=t(75);r(r.G+r.B,{setImmediate:a.set,clearImmediate:a.clear})},{22:22,75:75}],187:[function(t,e,n){var r=t(29),a=t(22),i=t(33),o=t(57),s=r.navigator,u=!!s&&/MSIE .\./.test(s.userAgent),c=function(t){return u?function(e,n){return t(i(o,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),n)}:t};a(a.G+a.B+a.F*u,{setTimeout:c(r.setTimeout),setInterval:c(r.setInterval)})},{22:22,29:29,33:33,57:57}],188:[function(t,e,n){t(85),t(169),t(124),t(132),t(136),t(137),t(125),t(135),t(134),t(130),t(131),t(129),t(126),t(128),t(133),t(127),t(95),t(94),t(114),t(115),t(116),t(117),t(118),t(119),t(120),t(121),t(122),t(123),t(97),t(98),t(99),t(100),t(101),t(102),t(103),t(104),t(105),t(106),t(107),t(108),t(109),t(110),t(111),t(112),t(113),t(162),t(165),t(168),t(164),t(160),t(161),t(163),t(166),t(167),t(90),t(92),t(91),t(93),t(86),t(87),t(89),t(88),t(153),t(154),t(155),t(156),t(157),t(158),t(138),t(96),t(159),t(170),t(171),t(139),t(140),t(141),t(142),t(143),t(146),t(144),t(145),t(147),t(148),t(149),t(150),t(152),t(151),t(172),t(179),t(180),t(181),t(182),t(183),t(177),t(175),t(176),t(174),t(173),t(178),t(184),t(187),t(186),t(185),e.exports=t(16)},{100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,16:16,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,98:98,99:99}],189:[function(t,e,n){(function(n){(function(t,n){!function(n){"use strict";function r(t,e,n,r){var a=Object.create((e||i).prototype),o=new h(r||[]);return a._invoke=l(t,n,o),a}function a(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(r){return{type:"throw",arg:r}}}function i(){}function o(){}function s(){}function u(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function c(t){this.arg=t}function p(e){function n(t,n){var r=e[t](n),a=r.value;return a instanceof c?Promise.resolve(a.arg).then(i,o):Promise.resolve(a).then(function(t){return r.value=t,r})}function r(t,e){function r(){return n(t,e)}return a=a?a.then(r,r):new Promise(function(t){t(r())})}"object"==typeof t&&t.domain&&(n=t.domain.bind(n));var a,i=n.bind(e,"next"),o=n.bind(e,"throw");n.bind(e,"return");this._invoke=r}function l(t,e,n){var r=w;return function(i,o){if(r===E)throw Error("Generator is already running");if(r===P){if("throw"===i)throw o;return v()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===g){n.delegate=null;var u=s.iterator["return"];if(u){var c=a(u,s.iterator,o);if("throw"===c.type){i="throw",o=c.arg;continue}}if("return"===i)continue}var c=a(s.iterator[i],s.iterator,o);if("throw"===c.type){n.delegate=null,i="throw",o=c.arg;continue}i="next",o=g;var p=c.arg;if(!p.done)return r=k,p;n[s.resultName]=p.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n._sent=o,r===k?n.sent=o:n.sent=g;else if("throw"===i){if(r===w)throw r=P,o;n.dispatchException(o)&&(i="next",o=g)}else"return"===i&&n.abrupt("return",o);r=E;var c=a(t,e,n);if("normal"===c.type){r=n.done?P:k;var p={value:c.arg,done:n.done};if(c.arg!==C)return p;n.delegate&&"next"===i&&(o=g)}else"throw"===c.type&&(r=P,i="throw",o=c.arg)}}}function f(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function d(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function h(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(f,this),this.reset(!0)}function m(t){if(t){var e=t[y];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,r=function a(){for(;++n=0;--r){var a=this.tryEntries[r],i=a.completion;if("root"===a.tryLoc)return e("end");if(a.tryLoc<=this.prev){var o=b.call(a,"catchLoc"),s=b.call(a,"finallyLoc");if(o&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),C}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var a=r.arg;d(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},C}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(202),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{202:202}],190:[function(t,e,n){!function(t){"use strict";function e(){return p.createDocumentFragment()}function n(t){return p.createElement(t)}function r(t){if(1===t.length)return a(t[0]);for(var n=e(),r=B.call(t),i=0;i-1}}([].indexOf||function(t){for(q=this.length;q--&&this[q]!==t;);return q}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=u?e(i):document.fonts.load(c(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(f,25)},function(){e(i)})};f()}else n(function(){function n(){var e;(e=-1!=v&&-1!=g||-1!=v&&-1!=b||-1!=g&&-1!=b)&&((e=v!=g&&v!=b&&g!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(v==y&&g==y&&b==y||v==x&&g==x&&b==x||v==_&&g==_&&b==_)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function f(){if((new Date).getTime()-p>=u)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(v=d.a.offsetWidth,g=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(f,50)}}var d=new r(s),h=new r(s),m=new r(s),v=-1,g=-1,b=-1,y=-1,x=-1,_=-1,w=document.createElement("div"),k=0;w.dir="ltr",a(d,c(i,"sans-serif")),a(h,c(i,"serif")),a(m,c(i,"monospace")),w.appendChild(d.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=d.a.offsetWidth,x=h.a.offsetWidth,_=m.a.offsetWidth,f(),o(d,function(t){v=t,n()}),a(d,c(i,'"'+i.family+'",sans-serif')),o(h,function(t){g=t,n()}),a(h,c(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),a(m,c(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],193:[function(t,e,n){!function(t,n){function r(t,e){var n=t.createElement("p"),r=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function a(){var t=x.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=x.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),x.elements=n+" "+t,p(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,r){if(e||(e=n),f)return e.createElement(t);r||(r=o(e));var a;return a=r.cache[t]?r.cache[t].cloneNode():v.test(t)?(r.cache[t]=r.createElem(t)).cloneNode():r.createElem(t),!a.canHaveChildren||m.test(t)||a.tagUrn?a:r.frag.appendChild(a)}function u(t,e){if(t||(t=n),f)return t.createDocumentFragment();e=e||o(t);for(var r=e.frag.cloneNode(),i=0,s=a(),u=s.length;u>i;i++)r.createElement(s[i]);return r}function c(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return x.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(x,e.frag)}function p(t){t||(t=n);var e=o(t);return!x.shivCSS||l||e.hasCSS||(e.hasCSS=!!r(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),f||c(t,e),t}var l,f,d="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,f=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,f=!0}}();var x={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:d,shivCSS:h.shivCSS!==!1,supportsUnknownElements:f,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:p,createElement:s,createDocumentFragment:u,addElements:i};t.html5=x,p(n),"object"==typeof e&&e.exports&&(e.exports=x)}("undefined"!=typeof window?window:this,document)},{}],194:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,r){for(var i,o=n.slice(),s=a(e,t),u=0,c=o.length;c>u&&(handler=o[u],"object"==typeof handler?"function"==typeof handler.handleEvent&&handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return i=!s.stoppedPropagation,r&&i&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function r(t,e,r){var a=b(e||t,r);v(t,"textContent",n(function(){return a.get.call(this)},function(t){a.set.call(this,t)}))}function a(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!f&&k.test(document.readyState)&&(f=!f,document.detachEvent(d,u),t=document.createEvent("Event"),t.initEvent(h,!0,!0),document.dispatchEvent(t))}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function p(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var l=!0,f=!1,d="onreadystatechange",h="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var r in n)if(y.call(n,r))try{v(e,r,n[r])}catch(a){t.console&&console.log(r+" failed on object:",e,a.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,x=t.Element.prototype,_=t.Text.prototype,w=/^[a-z]+$/,k=/loaded|complete/,E={},P=document.createElement("div"),C=document.documentElement,S=C.removeAttribute,O=C.setAttribute;r(t.HTMLCommentElement.prototype,x,"nodeValue"),r(t.HTMLScriptElement.prototype,null,"text"),r(_,null,"nodeValue"),r(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(x,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,r){if("function"==typeof n||"object"==typeof n){var a,o,u=this,c="on"+t,l=u[m]||v(u,m,{value:{}})[m],f=l[c]||(l[c]={}),d=f.h||(f.h=[]);if(!y.call(f,"w")){if(f.w=function(t){return t[m]||e(u,p(u,t),d,!1)},!y.call(E,c))if(w.test(t)){try{a=document.createEventObject(),a[m]=!0,9!=u.nodeType&&(null==u.parentNode&&P.appendChild(u),(o=u.getAttribute(c))&&S.call(u,c)),u.fireEvent(c,a),E[c]=!0}catch(a){for(E[c]=!1;P.hasChildNodes();)P.removeChild(P.firstChild)}null!=o&&O.call(u,c,o)}else E[c]=!1;(f.n=E[c])&&u.attachEvent(c,f.w)}i(d,n)<0&&d[r?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}}},dispatchEvent:{value:function(t){var n,r=this,a="on"+t.type,i=r[m],o=i&&i[a],s=!!o;return t.target||(t.target=r),s?o.n?r.fireEvent(a,t):e(r,t,o.h,!0):(n=r.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){if("function"==typeof e||"object"==typeof e){var r=this,a="on"+t,o=r[m],s=o&&o[a],u=s&&s.h,c=u?i(u,e):-1;c>-1&&u.splice(c,1)}}}}),g(_,{addEventListener:{value:x.addEventListener},dispatchEvent:{value:x.dispatchEvent},removeEventListener:{value:x.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var r=this,a="on"+t,o=r[m]||v(r,m,{value:{}})[m],s=o[a]||(o[a]={}),u=s.h||(s.h=[]);i(u,e)<0&&(r[a]||(r[a]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),r.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,r="on"+t.type,a=n[m],i=a&&a[r],o=!!i;return o&&(i.n?n.fireEvent(r,t):e(n,t,i.h,!0))}},removeEventListener:{value:x.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:{value:function(e,n,r){var a=this;x.addEventListener.call(a,e,n,r),l&&e===h&&!k.test(a.readyState)&&(l=!1,a.attachEvent(d,u),t==top&&!function i(t){try{a.documentElement.doScroll("left"),u()}catch(e){setTimeout(i,50)}}())}},dispatchEvent:{value:x.dispatchEvent},removeEventListener:{value:x.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,r=/^(top|right|bottom|left)$/,a=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,c=u.style,p=u.currentStyle,l=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(a,i),e=p?p[t]:c[t],n.test(e)&&!r.test(t)&&(o=c.left,s=l&&l.left,s&&(l.left=p.left),c.left="fontSize"===t?"1em":e,e=c.pixelLeft+"px",c.left=o,s&&(l.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,r){return r?new e(n):new t(n)}}()},addEventListener:{value:function(n,r,a){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,p(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),i(o,r)<0&&o[a?"unshift":"push"](r)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,r){var a="on"+e,o=(t[a]||Object)[m],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n=s)return(0,u["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,c.times)(r,(0,c.minus)(n[l],n[l-1])));for(var f=[(0,c.plus)(n[0],p(i[0],i[1]))],l=1;s-2>=l;l++)f.push((0,c.minus)(n[l],(0,c.average)([i[l],i[l-1]])));f.push((0,c.minus)(n[s-1],p(i[s-2],i[s-3])));var d=f[0],h=f[1],m=n[0],v=n[1],g=(e=(0,o["default"])()).moveto.apply(e,a(m)).curveto(d[0],d[1],h[0],h[1],v[0],v[1]);return{path:(0,c.range)(2,s).reduce(function(t,e){var r=f[e],a=n[e];return t.smoothcurveto(r[0],r[1],a[0],a[1])},g),centroid:(0,c.average)(n)}},e.exports=n["default"]},{198:198,199:199,200:200}],196:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(197),o=r(i),s=t(198),u=1e-5,c=function(t,e){var n=t.map(e),r=n.sort(function(t,e){var n=a(t,2),r=n[0],i=(n[1],a(e,2)),o=i[0];i[1];return r-o}),i=r.length,o=r[0][0],c=r[i-1][0],p=(0,s.minBy)(r,function(t){return t[1]}),l=(0,s.maxBy)(r,function(t){return t[1]});return o==c&&(c+=u),p==l&&(l+=u),{points:r,xmin:o,xmax:c,ymin:p,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,r=t.yaccessor,i=t.width,u=t.height,p=t.closed,l=t.min,f=t.max;n||(n=function(t){var e=a(t,2),n=e[0];e[1];return n}),r||(r=function(t){var e=a(t,2),n=(e[0],e[1]);return n});var d=function(t){return[n(t),r(t)]},h=e.map(function(t){return c(t,d)}),m=(0,s.minBy)(h,function(t){return t.xmin}),v=(0,s.maxBy)(h,function(t){return t.xmax}),g=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==f?(0,s.maxBy)(h,function(t){return t.ymax}):f;p&&(g=Math.min(g,0),b=Math.max(b,0));var y=p?0:g,x=(0,o["default"])([m,v],[0,i]),_=(0,o["default"])([g,b],[u,0]),w=function(t){var e=a(t,2),n=e[0],r=e[1];return[x(n),_(r)]};return{arranged:h,scale:w,xscale:x,yscale:_,base:y}},e.exports=n["default"]},{197:197,198:198}],197:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function i(t,e){var n=r(t,2),a=n[0],o=n[1],s=r(e,2),u=s[0],c=s[1],p=function(t){return u+(c-u)*(t-a)/(o-a)};return p.inverse=function(){return i([u,c],[a,o])},p};n["default"]=a,e.exports=n["default"]},{}],198:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},u=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},c=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},p=function(t,e){var n=r(t,2),a=n[0],i=n[1],o=r(e,2),s=o[0],u=o[1];return[a+s,i+u]},l=function(t,e){var n=r(t,2),a=n[0],i=n[1],o=r(e,2),s=o[0],u=o[1];return[a-s,i-u]},f=function(t,e){var n=r(e,2),a=n[0],i=n[1];return[t*a,t*i]},d=function(t){var e=r(t,2),n=e[0],a=e[1];return Math.sqrt(n*n+a*a)},h=function(t){return t.reduce(p,[0,0])},m=function(t){return f(1/t.length,t.reduce(p))},v=function(t,e){return f(t,[Math.sin(e),-Math.cos(e)])},g=function(t,e){var n=t||{};for(var r in n){var a=n[r];e[r]=a(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var r=[],a=t;e>a;a++)r.push(a);return n&&r.push(e),r},y=function(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var u=o.value,c=t[u];n.push(e(u,c))}}catch(p){a=!0,i=p}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n},x=function(t){return y(t,function(t,e){return[t,e]})},_=function(t){return t};n.sum=a,n.min=i,n.max=o,n.sumBy=s,n.minBy=u,n.maxBy=c,n.plus=p,n.minus=l,n.times=f,n.id=_,n.length=d,n.sumVectors=h,n.average=m,n.onCircle=v,n.enhance=g,n.range=b,n.mapObject=y,n.pairs=x,n["default"]={sum:a,min:i,max:o,sumBy:s,minBy:u,maxBy:c,plus:p,minus:l,times:f,id:_,length:d,sumVectors:h,average:m,onCircle:v,enhance:g,range:b,mapObject:y,pairs:x}},{}],199:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],r=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(r=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);r=!0);}catch(u){a=!0,i=u}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},a=function(t,e){var n=r(t,2),a=n[0],i=n[1],o=r(e,2),s=o[0],u=o[1];return a===s&&i===u},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},u=function(t){var e=t.command,n=t.params,r=n.map(function(t){return s(t,6)});return e+" "+r.join(" ")},c=function(t,e){var n=t.command,a=t.params,i=r(e,2),o=i[0],s=i[1];switch(n){case"M":return[a[0],a[1]];case"L":return[a[0],a[1]];case"H":return[a[0],s];case"V":return[o,a[0]];case"Z":return null;case"C":return[a[4],a[5]];case"S":return[a[2],a[3]];case"Q":return[a[2],a[3]];case"T":return[a[0],a[1]];case"A":return[a[5],a[6]]}},p=function(t,e){return function(n){var r="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,r)}},l=function(t){return i(n(e,t))};return{moveto:p(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:p(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:p(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:p(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:p(["x1","y1","x2","y2","x","y"],function(t,e,n,r,a,i){return l({command:"C",params:[t,e,n,r,a,i]})}),smoothcurveto:p(["x2","y2","x","y"],function(t,e,n,r){return l({command:"S",params:[t,e,n,r]})}),qcurveto:p(["x1","y1","x","y"],function(t,e,n,r){return l({command:"Q",params:[t,e,n,r]})}),smoothqcurveto:p(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:p(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,r,a,i,o){return l({command:"A",params:[t,e,n,r,a,i,o]})}),print:function(){return e.map(u).join(" ")},points:function(){var t=[],n=[0,0],r=!0,a=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(r=(o=s.next()).done);r=!0){var u=o.value,p=c(u,n);n=p,p&&t.push(p)}}catch(l){a=!0,i=l}finally{try{!r&&s["return"]&&s["return"]()}finally{if(a)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],r=t.points()[0],o=t.instructions().slice(1);return a(n,r)||o.unshift({command:"L",params:r}),i(this.instructions().concat(o))}}};n["default"]=function(){return a()},e.exports=n["default"]},{}],200:[function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function a(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1)for(var n=1;n1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var a,i;i=n.shift();)for(a in i)Ro.call(i,a)&&(t[a]=i[a]);return t}function a(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===jo.call(t)}function o(t){return Lo.test(jo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function c(t){return t&&"[object Object]"===jo.call(t)}function p(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];throw t=p(t,n),Error(t)}function f(){Rv.DEBUG&&Ao.apply(null,arguments)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=p(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=p(t,n),No[t]||(No[t]=!0,To(t,n))}function m(){Rv.DEBUG&&d.apply(null,arguments)}function v(){Rv.DEBUG&&h.apply(null,arguments)}function g(t,e,n){var r=b(t,e,n);return r?r[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function x(t){var e,n,r,a,i,o;for(e=t.split("."),(n=Go[e.length])||(n=_(e.length)),i=[],r=function(t,n){return t?"*":e[n]},a=n.length;a--;)o=n[a].map(r).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function _(t){var e,n,r,a,i,o,s,u,c="";if(!Go[t]){for(r=[];c.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)u.push(a(n[o]));r[i]=u}Go[t]=r}return Go[t]}function w(t,e,n,r){var a=t[e];if(!a||!a.equalsOrStartsWith(r)&&a.equalsOrStartsWith(n))return t[e]=a?a.replace(n,r):r,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function E(t){return null==t?t:(Qo.hasOwnProperty(t)||(Qo[t]=new Ko(t)),Qo[t])}function P(t,e){function n(e,n){var r,a,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(r=t.viewmodel.wrapped[n.str],a=r?r.get():t.viewmodel.get(n),o=a?Object.keys(a):null),o&&o.forEach(function(t){"_ractive"===t&&i(a)||e.push(n.join(t))}),e}var r,a,o;for(r=e.str.split("."),o=[Yo];a=r.shift();)"*"===a?o=o.reduce(n,[]):o[0]===Yo?o[0]=E(a):o=o.map(C(a));return o}function C(t){return function(e){return e.join(t)}}function S(t){return t?t.replace(Wo,".$1"):""}function O(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var r=void 0,a=void 0;if(/\*/.test(e))return a={},P(t,E(S(e))).forEach(function(e){var r=t.viewmodel.get(e);if(!u(r))throw Error(Jo);a[e.str]=r+n}),t.set(a);if(r=t.get(e),!u(r))throw Error(Jo);return t.set(e,+r+n)}function A(t,e){return Xo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=rs[t]}function M(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function R(t,e){for(var n=0,r=t.length;r>n;n++)if(t[n]==e)return!0;return!1}function j(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function L(t){return"string"==typeof t?[t]:void 0===t?[]:t;
+}function N(t){return t[t.length-1]}function F(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function D(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function q(t,e,n,r){var a;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof as)e.then(n,r);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{a=e.then}catch(i){return void r(i)}if("function"==typeof a){var o,s,u;s=function(e){o||(o=!0,q(t,e,n,r))},u=function(t){o||(o=!0,r(t))};try{a.call(e,s,u)}catch(i){if(!o)return r(i),void(o=!0)}}else n(e)}}function V(t,e,n){var r;return e=S(e),"~/"===e.substr(0,2)?(r=E(e.substring(2)),G(t,r.firstKey,n)):"."===e[0]?(r=U(ps(n),e),r&&G(t,r.firstKey,n)):r=z(t,E(e),n),r}function U(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return E(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),E(n.join("."))}return E(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function z(t,e,n,r){var a,i,o,s,u;if(e.isRoot)return e;for(i=e.firstKey;n;)if(a=n.context,n=n.parent,a&&(s=!0,o=t.viewmodel.get(a),o&&("object"==typeof o||"function"==typeof o)&&i in o))return a.join(e.str);return W(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=E(i),u=z(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:u}),e):r||s?void 0:(t.viewmodel.set(e,void 0),e)}function G(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=E(e),(n=z(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function Q(t){t.unbind()}function K(t){t.unrender()}function $(t){t.cancel()}function Y(t){t.detach()}function X(t){t.detachNodes()}function J(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;ds.ractives.length;)e=ds.ractives.pop(),n=e.viewmodel.applyChanges(),n&&gs.fire(e,n);for(tt(),t=0;t=0;i--)a=t._subs[e[i]],a&&(s=gt(t,a,n,r)&&s);if(zs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=E(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,r)}}function gt(t,e,n,r){var a=null,i=!1;n&&!n._noArg&&(r=[n].concat(r)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,r)===!1&&(i=!0);return n&&!n._noArg&&i&&(a=n.original)&&(a.preventDefault&&a.preventDefault(),a.stopPropagation&&a.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};Gs(this,t,e)}function yt(t){var e;return t=E(S(t)),e=this.viewmodel.get(t,Qs),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function xt(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,_t(this)}function _t(t){$s.fire(t),t.findAllComponents("*").forEach(function(t){_t(t.instance)})}function wt(t,e,n){var r,a;return t=E(S(t)),r=this.viewmodel.get(t),i(r)&&i(e)?(a=bs.start(this,!0),this.viewmodel.merge(t,r,e,n),bs.end(),a):this.set(t,e,n&&n.complete)}function kt(t,e){var n,r;return n=P(t,e),r={},n.forEach(function(e){r[e.str]=t.get(e.str)}),r}function Et(t,e,n,r){var a,i,o;e=E(S(e)),r=r||pu,e.isPattern?(a=new uu(t,e,n,r),t.viewmodel.patternObservers.push(a),i=!0):a=new Zs(t,e,n,r),a.init(r.init),t.viewmodel.register(e,a,i?"patternObservers":"observers"),a.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(a),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,a,"patternObservers")):t.viewmodel.unregister(e,a,"observers"),o=!0)}};return t._observers.push(s),s}function Pt(t,e,n){var r,a,i,o;if(c(t)){n=e,a=t,r=[];for(t in a)a.hasOwnProperty(t)&&(e=a[t],r.push(this.observe(t,e,n)));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",cu(this,t,e,n);if(i=t.split(" "),1===i.length)return cu(this,t,e,n);for(r=[],o=i.length;o--;)t=i[o],t&&r.push(cu(this,t,e,n));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}function Ct(t,e,n){var r=this.observe(t,function(){e.apply(this,arguments),r.cancel()},{init:!1,defer:n&&n.defer});return r}function St(t,e){var n,r=this;if(t)n=t.split(" ").map(du).filter(hu),n.forEach(function(t){var n,a;(n=r._subs[t])&&(e?(a=n.indexOf(e),-1!==a&&n.splice(a,1)):r._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function Ot(t,e){var n,r,a,i=this;if("object"==typeof t){n=[];for(r in t)t.hasOwnProperty(r)&&n.push(this.on(r,t[r]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return a=t.split(" ").map(du).filter(hu),a.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function At(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var r,a,i,o,s,u,c=[];if(r=Mt(t,e,n),!r)return null;for(a=t.length,s=r.length-2-r[1],i=Math.min(a,r[0]),o=i+r[1],u=0;i>u;u+=1)c.push(u);for(;o>u;u+=1)c.push(-1);for(;a>u;u+=1)c.push(u+s);return 0!==s?c.touchedFrom=r[0]:c.touchedFrom=t.length,c}function Mt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Rt(e,n){var r,a,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),r=bs.start(this,!0),bs.scheduleTask(function(){return Mu.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&jt(s),e.innerHTML=""}return this.cssId&&Au.apply(),e&&((a=e.__ractive_instances__)?a.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,r.then(function(){return Ru.fire(o)})}function jt(t){t.splice(0,t.length).forEach(H)}function Lt(t,e){for(var n=t.slice(),r=e.length;r--;)~n.indexOf(e[r])||n.push(e[r]);return n}function Nt(t,e){var n,r,a;return r='[data-ractive-css~="{'+e+'}"]',a=function(t){var e,n,a,i,o,s,u,c=[];for(e=[];n=Iu.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Dt),u=e.length;u--;)s=i.slice(),a=e[u],s[u]=a.base+r+a.modifiers||"",o=i.slice(),o[u]=r+" "+o[u],c.push(s.join(" "),o.join(" "));return c.join(", ")},n=qu.test(t)?t.replace(qu,r):t.replace(Du,"").replace(Fu,function(t,e){var n,r;return Bu.test(e)?t:(n=e.split(",").map(Ft),r=n.map(a).join(", ")+" ",t.replace(e,r))})}function Ft(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Dt(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,r="function"==typeof e;return e||n||(e={}),n||r?function(){var a=r?qt(e,this):e,i=n?qt(t,this):t;return Vt(a,i)}:Vt(e,t)}function qt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Vt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Ut(t){var e=Eo(Ku);return e.parse=function(e,n){return zt(e,n||t)},e}function zt(t,e){if(!Hu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hu(t,e||this.options)}function Gt(t,e){var n;if(!Ji){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a
-
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device.
diff --git a/tgui/src/interfaces/ntnet_chat.ract b/tgui/src/interfaces/ntnet_chat.ract
new file mode 100644
index 00000000000..65420867924
--- /dev/null
+++ b/tgui/src/interfaces/ntnet_chat.ract
@@ -0,0 +1,103 @@
+
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
+
+ {{#if data.adminmode}}
+ ADMINISTRATIVE MODE
+ {{/if}}
+
+ {{#if data.title}}
+
+ Current channel:
+
+
+ {{data.title}}
+
+
+ Operator access:
+
+
+ {{#if data.is_operator}}
+ Enabled
+ {{else}}
+ Disabled
+ {{/if}}
+
+
+ Controls:
+
+
+
+ | Send message
+ |
| Change nickname
+ |
| Toggle administration mode
+ |
| Leave channel
+ |
| Save log to local drive
+ {{#if data.is_operator}}
+ |
| Rename channel
+ |
| Set password
+ |
| Delete channel
+ {{/if}}
+ |
+
+ Chat Window
+
+
+
+ {{#each data.messages}}
+ {{msg}}
+ {{/each}}
+
+
+
+ Connected Users
+ {{#each data.clients}}
+ {{name}}
+ {{/each}}
+ {{else}}
+ Controls:
+
+ | Change nickname
+ |
| New Channel
+ |
| Toggle administration mode
+ |
+ Available channels:
+
+ {{#each data.all_channels}}
+ {{id}}
+ {{/each}}
+ |
+ {{/if}}
+
\ No newline at end of file
diff --git a/tgui/src/interfaces/ntnet_dos.ract b/tgui/src/interfaces/ntnet_dos.ract
index b34ec6c40c1..afff153814d 100644
--- a/tgui/src/interfaces/ntnet_dos.ract
+++ b/tgui/src/interfaces/ntnet_dos.ract
@@ -1,27 +1,58 @@
-
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
{{#if data.error}}
##SYSTEM ERROR: {{data.error}}RESET
+ {{elseif data.target}}
+ ##DoS traffic generator active. Tx: {{data.speed}}GQ/s
+ {{#each data.dos_strings}}
+ {{nums}}
+ {{/each}}
+ ABORT
{{else}}
- {{#if data.target}}
- ##DoS traffic generator active. Tx: {{data.speed}}GQ/s
- {{#each data.dos_strings}}
- {{value}}
- {{/each}}
- ABORT
+ ##DoS traffic generator ready. Select target device.
+ {{#if data.focus}}
+ Targeted device ID: {{data.focus}}
{{else}}
- ##DoS traffic generator ready. Select target device.
- {{#if data.focus}}
- Targeted device ID: {{data.focus}}
- {{else}}
- Targeted device ID: None
- {{/if}}
- EXECUTE
- Detected devices on network:
- {{#each data.relays}}
- {{value}}
- {{/each}}
+ Targeted device ID: None
{{/if}}
+ EXECUTE
+ Detected devices on network:
+ {{#each data.relays}}
+ {{id}}
+ {{/each}}
{{/if}}
diff --git a/tgui/src/interfaces/ntnet_downloader.ract b/tgui/src/interfaces/ntnet_downloader.ract
index 1c7f4a3324c..da100b50e5a 100644
--- a/tgui/src/interfaces/ntnet_downloader.ract
+++ b/tgui/src/interfaces/ntnet_downloader.ract
@@ -1,42 +1,40 @@
-
-
-
-
+
+
- | Shutdown
- {{#if data.PC_showexitprogram}}
- | EXIT PROGRAM
- | Minimize Program
- {{/if}}
+ {{#if data.PC_batteryicon && data.PC_showbatteryicon}}
+ |
+ {{/if}}
+ {{#if data.PC_batterypercent && data.PC_showbatteryicon}}
+ | {{data.PC_batterypercent}}
+ {{/if}}
+ {{#if data.PC_ntneticon}}
+ |
+ {{/if}}
+ {{#if data.PC_apclinkicon}}
+ |
+ {{/if}}
+ {{#if data.PC_stationtime}}
+ | {{data.PC_stationtime}}
+ {{/if}}
+ {{#each data.PC_programheaders}}
+ |
+ {{/each}}
|
-
-
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
+
Welcome to software download utility. Please select which software you wish to download.
{{#if data.error}}
@@ -79,7 +77,7 @@
{{#each data.downloadable_programs}}
- {{value.filename}} ({{size}} GQ)
+ {{filename}} ({{size}} GQ)
{{filedesc}}
diff --git a/tgui/src/interfaces/ntnet_monitor.ract b/tgui/src/interfaces/ntnet_monitor.ract
index 4c01db1f73e..67943650afe 100644
--- a/tgui/src/interfaces/ntnet_monitor.ract
+++ b/tgui/src/interfaces/ntnet_monitor.ract
@@ -69,19 +69,19 @@
| Software Downloads
| {{data.config_softwaredownload ? 'ENABLED' : 'DISABLED'}}
- | TOGGLE
+ | TOGGLE
|
| Peer to Peer Traffic
| {{data.config_peertopeer ? 'ENABLED' : 'DISABLED'}}
- | TOGGLE
+ | TOGGLE
|
| Communication Systems
| {{data.config_communication ? 'ENABLED' : 'DISABLED'}}
- | TOGGLE
+ | TOGGLE
|
| Remote System Control
| {{data.config_systemcontrol ? 'ENABLED' : 'DISABLED'}}
- | TOGGLE
+ | TOGGLE
@@ -116,7 +116,7 @@
{{#each data.ntnetlogs}}
- {{value}}
+ {{entry}}
{{/each}}
diff --git a/tgui/src/interfaces/nt_relay.ract b/tgui/src/interfaces/ntnet_relay.ract
similarity index 100%
rename from tgui/src/interfaces/nt_relay.ract
rename to tgui/src/interfaces/ntnet_relay.ract
diff --git a/tgui/src/interfaces/ntnet_transfer.ract b/tgui/src/interfaces/ntnet_transfer.ract
new file mode 100644
index 00000000000..f0c499f8de0
--- /dev/null
+++ b/tgui/src/interfaces/ntnet_transfer.ract
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
+
+ {{#if data.error}}
+
+ An error has occured during operation...
+ Additional information: {{data.error}}
+ Clear
+
+ {{elseif data.downloading}}
+ Download in progress...
+
+ Downloaded file:
+
+
+ {{data.download_name}}
+
+
+ Download progress:
+
+
+ {{data.download_progress}} / {{data.download_size}} GQ
+
+
+ Transfer speed:
+
+
+ {{data.download_netspeed}}GQ/s
+
+
+ Controls:
+
+
+ Abort download
+
+ {{elseif data.uploading}}
+ Server enabled
+
+ Connected clients:
+
+
+ {{data.upload_clients}}
+
+
+ Provided file:
+
+
+ {{data.upload_filename}}
+
+
+ Server password:
+
+
+ {{#if data.haspassword}}
+ ENABLED
+ {{else}}
+ DISABLED
+ {{/if}}
+
+
+ Commands:
+
+
+ Set password
+ Exit server
+
+ {{elseif data.upload_filelist}}
+ File transfer server ready. Select file to upload:
+
+ | File name | File size | Controls
+ {{#each data.upload_filelist}}
+ |
|---|
| {{filename}}
+ | {{size}}GQ
+ | Select
+ {{/each}}
+ |
+
+ Set password
+ Return
+ {{else}}
+ Available files:
+ | Server UID | File Name | File Size | Password Protection | Operations
+ {{#each data.servers}}
+ |
|---|
| {{uid}}
+ | {{filename}}
+ | {{size}}GQ
+ {{#if haspassword}}
+ | Enabled
+ {{/if}}
+ {{#if !haspassword}}
+ | Disabled
+ {{/if}}
+
+ | Download
+ {{/each}}
+ |
+
+ Send file
+ {{/if}}
+
+
\ No newline at end of file
diff --git a/tgui/src/interfaces/power_monitor_prog.ract b/tgui/src/interfaces/power_monitor_prog.ract
new file mode 100644
index 00000000000..ba40f27ec07
--- /dev/null
+++ b/tgui/src/interfaces/power_monitor_prog.ract
@@ -0,0 +1,112 @@
+
+
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
+
+
+ {{#if config.fancy}}
+
+ {{else}}
+
+ {{data.supply}} W
+
+
+ {{data.demand}} W
+
+ {{/if}}
+
+
+
+ Area
+ Charge
+ Load
+ Status
+ Equipment
+ Lighting
+ Environment
+
+ {{#each data.areas}}
+
+ {{Math.round(adata.areas[@index].charge)}} %
+ {{Math.round(adata.areas[@index].load)}} W
+ {{chargingMode(charging)}}
+ {{channelPower(eqp)}} [{{channelMode(eqp)}}]
+ {{channelPower(lgt)}} [{{channelMode(lgt)}}]
+ {{channelPower(env)}} [{{channelMode(env)}}]
+
+ {{/each}}
+
\ No newline at end of file
diff --git a/tgui/src/interfaces/revelation.ract b/tgui/src/interfaces/revelation.ract
new file mode 100644
index 00000000000..50f2489facb
--- /dev/null
+++ b/tgui/src/interfaces/revelation.ract
@@ -0,0 +1,60 @@
+
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
+
+
+
+
+ Payload status:
+
+
+ {{#if data.armed}}
+ ARMED
+ {{else}}
+ DISARMED
+ {{/if}}
+
+
+ Controls:
+
+
+
+ | OBFUSCATE PROGRAM NAME
+ | | {{data.armed ? "DISARM" : "ARM"}}
+ ACTIVATE
+ |
+
+
+
\ No newline at end of file
diff --git a/tgui/src/interfaces/station_alert_prog.ract b/tgui/src/interfaces/station_alert_prog.ract
new file mode 100644
index 00000000000..5ba78cdb91e
--- /dev/null
+++ b/tgui/src/interfaces/station_alert_prog.ract
@@ -0,0 +1,47 @@
+
+
+
+
+ | Shutdown
+ {{#if data.PC_showexitprogram}}
+ | EXIT PROGRAM
+ | Minimize Program
+ {{/if}}
+ |
+
+
+
+{{#each data.alarms:class}}
+
+
+ {{#each .}}
+ - {{.}}
+ {{else}}
+ - System Nominal
+ {{/each}}
+
+
+{{/each}}
\ No newline at end of file
|