diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index b4ea0a9..2a87cd2 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -8,7 +8,6 @@ permissions:
contents: write
jobs:
buildBinaries:
- if: ${{ github.ref == 'refs/heads/main' }}
name: Build and release binaries
runs-on: ubuntu-latest
steps:
@@ -36,7 +35,6 @@ jobs:
make_latest: true
buildDockerImages:
- if: ${{ github.ref == 'refs/heads/main' }}
name: Build and push Docker Images
runs-on: ubuntu-latest
steps:
diff --git a/.gitignore b/.gitignore
index 5d298b3..57e6e1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,8 +2,10 @@
threadfin
vendor/
.DS_Store
-threadfin.exe
binaries/
*.js.map
.vscode/
dist/
+node_modules/
+*.exe
+*.js
diff --git a/.vscode/launch.json b/.vscode/launch.json
deleted file mode 100644
index 6ca18cf..0000000
--- a/.vscode/launch.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "version": "0.2.0",
- "configurations": [
- {
- "preLaunchTask": "tsc build",
- "name": "Launch Package",
- "type": "go",
- "request": "launch",
- "mode": "auto",
- "program": "${workspaceFolder}",
- "args": ["-dev"]
- }
- ]
-}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
deleted file mode 100644
index 80782d2..0000000
--- a/.vscode/tasks.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "version": "2.0.0",
- "tasks": [
- {
- "type": "typescript",
- "tsconfig": "ts/tsconfig.json",
- "problemMatcher": [
- "$tsc"
- ],
- "group": "build",
- "label": "tsc build"
- },
- {
- "type": "go",
- "command": "build",
- "label": "go build"
- },
- {
- "label": "Build",
- "dependsOn" : [
- "tsc build",
- "go build"
- ]
- }
- ]
-}
\ No newline at end of file
diff --git a/README.md b/README.md
index 2b1ed84..a15b80c 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
![Threadfin](html/img/threadfin.png)
+
@@ -9,7 +9,7 @@
You can follow the old xTeVe documentation for now until I update it for Threadfin. Documentation for setup and configuration is [here](https://github.com/xteve-project/xTeVe-Documentation/blob/master/en/configuration.md).
#### Donation
-[Github Sponsor](https://github.com/sponsors/Fyb3roptik)
+[Paypal/Me](https://paypal.me/MarcelGoerentz)
## Requirements
### Plex
@@ -32,6 +32,7 @@ You can follow the old xTeVe documentation for now until I update it for Threadf
* New Bootstrap based UI
* RAM based buffer instead of File based
+* HTTPS Webserver
#### Filter Group
* Can now add a starting channel number for the filter group
@@ -68,8 +69,26 @@ You can follow the old xTeVe documentation for now until I update it for Threadf
---
+## CLI arguments
+
+These are the currently available command line arguments:
+
+| arg | type | description | example |
+|:-----------|:--------|:--------------------------------------------------------|:--------------------------------------------|
+| -h | bool | prints the help and don't start the service | -h |
+| -dev | bool | activates the developer mode | -dev |
+| -config | string | sets the path to the root config folder | -config=~./.threadfin |
+| -port | integer | sets the port for the webserver (also for https) | -port=34400 |
+| -useHttps | bool | switches the webserver to https | -useHttps |
+| -restore | string | restores the settings from the given filepath | -restore=/path/to/file/threadfin_backup.zip |
+| -gitBranch | string | sets the branch from which the program is to be updated | -gitBranch=beta |
+| -debug | integer | sets the debug level | -debug=3 |
+| -info | bool | prints the system info | -info |
+
+---
+
## Docker Image
-[Threadfin](https://hub.docker.com/r/fyb3roptik/threadfin)
+[Threadfin](https://hub.docker.com/r/marcelGoerentz/threadfin)
* Docker compose example
@@ -94,7 +113,7 @@ services:
---
### Threadfin Beta branch
-New features and bug fixes are only available in beta branch. Only after successful testing are they are merged into the main branch.
+New features and bug fixes are only available in beta branch. Only after successful testing they are merged into the main branch.
**It is not recommended to use the beta version in a production system.**
@@ -102,7 +121,7 @@ With the command line argument `branch` the Git Branch can be changed. Threadfin
#### Switch from master to beta branch:
```
-threadfin -branch beta
+threadfin -branch=beta
...
[Threadfin] GitHub: https://github.com/Threadfin/Threadfin
@@ -112,7 +131,7 @@ threadfin -branch beta
#### Switch from beta to master branch:
```
-threadfin -branch main
+threadfin -branch=main
...
[Threadfin] GitHub: https://github.com/Threadfin/Threadfin
@@ -132,7 +151,6 @@ When the branch is changed, an update is only performed if there is a new versio
#### Dependencies
* [go-ssdp](https://github.com/koron/go-ssdp)
* [websocket](https://github.com/gorilla/websocket)
-* [osext](https://github.com/kardianos/osext)
* [avfs](github.com/avfs/avfs)
#### Build
diff --git a/html/js/authentication_ts.js b/html/js/authentication_ts.js
deleted file mode 100644
index 83bdf87..0000000
--- a/html/js/authentication_ts.js
+++ /dev/null
@@ -1,33 +0,0 @@
-function login() {
- var err = false;
- var data = new Object();
- var div = document.getElementById("content");
- var form = document.getElementById("authentication");
- var inputs = div.getElementsByTagName("INPUT");
- console.log(inputs);
- for (var i = inputs.length - 1; i >= 0; i--) {
- var key = inputs[i].name;
- var value = inputs[i].value;
- if (value.length == 0) {
- inputs[i].style.borderColor = "red";
- err = true;
- }
- data[key] = value;
- }
- if (err == true) {
- data = new Object();
- return;
- }
- if (data.hasOwnProperty("confirm")) {
- if (data["confirm"] != data["password"]) {
- alert("sdafsd");
- document.getElementById('password').style.borderColor = "red";
- document.getElementById('confirm').style.borderColor = "red";
- document.getElementById("err").innerHTML = "{{.account.failed}}";
- return;
- }
- }
- console.log(data);
- form.submit();
-}
-//# sourceMappingURL=authentication_ts.js.map
\ No newline at end of file
diff --git a/html/js/base_ts.js b/html/js/base_ts.js
deleted file mode 100644
index b1bdc71..0000000
--- a/html/js/base_ts.js
+++ /dev/null
@@ -1,559 +0,0 @@
-var SERVER = new Object();
-var BULK_EDIT = false;
-var COLUMN_TO_SORT;
-var INACTIVE_COLUMN_TO_SORT;
-var SEARCH_MAPPING = new Object();
-var UNDO = new Object();
-var SERVER_CONNECTION = false;
-var WS_AVAILABLE = false;
-const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]');
-const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
-// new ClipboardJS('.copy-btn');
-var clipboard = new ClipboardJS('.copy-btn');
-clipboard.on('success', function (e) {
- const tooltip = bootstrap.Tooltip.getInstance(e.trigger);
- tooltip.setContent({ '.tooltip-inner': 'Copied!' });
-});
-clipboard.on('error', function (e) {
- console.log(e);
-});
-var popupModal = new bootstrap.Modal(document.getElementById("popup"), {
- keyboard: true,
- focus: true
-});
-var loadingModal = new bootstrap.Modal(document.getElementById("loading"), {
- keyboard: true,
- focus: true
-});
-// Menü
-var menuItems = new Array();
-menuItems.push(new MainMenuItem("playlist", "{{.mainMenu.item.playlist}}", "m3u.png", "{{.mainMenu.headline.playlist}}"));
-menuItems.push(new MainMenuItem("xmltv", "{{.mainMenu.item.xmltv}}", "xmltv.png", "{{.mainMenu.headline.xmltv}}"));
-menuItems.push(new MainMenuItem("filter", "{{.mainMenu.item.filter}}", "filter.png", "{{.mainMenu.headline.filter}}"));
-menuItems.push(new MainMenuItem("mapping", "{{.mainMenu.item.mapping}}", "mapping.png", "{{.mainMenu.headline.mapping}}"));
-menuItems.push(new MainMenuItem("users", "{{.mainMenu.item.users}}", "users.png", "{{.mainMenu.headline.users}}"));
-menuItems.push(new MainMenuItem("settings", "{{.mainMenu.item.settings}}", "settings.png", "{{.mainMenu.headline.settings}}"));
-menuItems.push(new MainMenuItem("log", "{{.mainMenu.item.log}}", "log.png", "{{.mainMenu.headline.log}}"));
-menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.png", "{{.mainMenu.headline.logout}}"));
-// Kategorien für die Einstellungen
-var settingsCategory = new Array();
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "ThreadfinAutoUpdate,ssdp,tuner,epgSource,epgCategories,epgCategoriesColors,dummy,dummyChannel,ignoreFilters,api"));
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii"));
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "listeningIp,httpThreadfinDomain,forceHttps,httpsPort,httpsThreadfinDomain"));
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,udpxy,buffer.size.kb,storeBufferInRAM,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options"));
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep"));
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api"));
-function showPopUpElement(elm) {
- showElement(elm, true);
- // setTimeout(function () {
- // showElement("popup", true);
- // }, 10);
- return;
-}
-function showElement(elmID, type) {
- if (elmID == "popup-custom" || elmID == "popup") {
- switch (type) {
- case true:
- popupModal.show();
- break;
- case false:
- popupModal.hide();
- break;
- }
- }
- if (elmID == "loading") {
- switch (type) {
- case true:
- loadingModal.show();
- break;
- case false:
- loadingModal.hide();
- break;
- }
- }
-}
-function changeButtonAction(element, buttonID, attribute) {
- var value = element.options[element.selectedIndex].value;
- document.getElementById(buttonID).setAttribute(attribute, value);
-}
-function getLocalData(dataType, id) {
- var data = new Object();
- switch (dataType) {
- case "m3u":
- data = SERVER["settings"]["files"][dataType][id];
- break;
- case "hdhr":
- data = SERVER["settings"]["files"][dataType][id];
- break;
- case "filter":
- case "custom-filter":
- case "group-title":
- if (id == -1) {
- data["active"] = true;
- data["caseSensitive"] = false;
- data["description"] = "";
- data["exclude"] = "";
- data["filter"] = "";
- data["include"] = "";
- data["name"] = "";
- data["type"] = "group-title";
- data["x-category"] = "";
- SERVER["settings"]["filter"][id] = data;
- }
- data = SERVER["settings"]["filter"][id];
- break;
- case "xmltv":
- data = SERVER["settings"]["files"][dataType][id];
- break;
- case "users":
- data = SERVER["users"][id]["data"];
- break;
- case "mapping":
- data = SERVER["xepg"]["epgMapping"][id];
- break;
- case "m3uGroups":
- data = SERVER["data"]["playlist"]["m3u"]["groups"];
- break;
- }
- return data;
-}
-function getObjKeys(obj) {
- var keys = new Array();
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) {
- keys.push(i);
- }
- }
- return keys;
-}
-function getOwnObjProps(object) {
- return object ? Object.getOwnPropertyNames(object) : [];
-}
-function getAllSelectedChannels() {
- var channels = new Array();
- if (BULK_EDIT == false) {
- return channels;
- }
- var trs = document.getElementById("content_table").getElementsByTagName("TR");
- for (var i = 1; i < trs.length; i++) {
- if (trs[i].style.display != "none") {
- if (trs[i].firstChild.firstChild.checked == true) {
- channels.push(trs[i].id);
- }
- }
- }
- return channels;
-}
-function selectAllChannels(table_name = "content_table") {
- var bulk = false;
- var trs = document.getElementById(table_name).getElementsByTagName("TR");
- if (trs[0].firstChild.firstChild.checked == true) {
- bulk = true;
- }
- for (var i = 1; i < trs.length; i++) {
- if (trs[i].style.display != "none") {
- switch (bulk) {
- case true:
- trs[i].firstChild.firstChild.checked = true;
- break;
- case false:
- trs[i].firstChild.firstChild.checked = false;
- break;
- }
- }
- }
- return;
-}
-function bulkEdit() {
- BULK_EDIT = !BULK_EDIT;
- var className;
- var rows = document.getElementsByClassName("bulk");
- switch (BULK_EDIT) {
- case true:
- className = "bulk showBulk";
- break;
- case false:
- className = "bulk hideBulk";
- break;
- }
- for (var i = 0; i < rows.length; i++) {
- rows[i].className = className;
- rows[i].checked = false;
- }
- return;
-}
-function sortTable(column, table_name = "content_table") {
- // console.log("COLUMN: " + column);
- if ((column == COLUMN_TO_SORT && table_name == "content_table") || (column == INACTIVE_COLUMN_TO_SORT && table_name == "inactive_content_table")) {
- return;
- }
- var table = document.getElementById(table_name);
- var tableHead = table.getElementsByTagName("TR")[0];
- var tableItems = tableHead.getElementsByTagName("TD");
- var sortObj = new Object();
- var x, xValue;
- var tableHeader;
- var sortByString = false;
- if (column > 0 && COLUMN_TO_SORT > 0 && table_name == "content_table") {
- tableItems[COLUMN_TO_SORT].className = "pointer";
- tableItems[column].className = "sortThis";
- }
- else if (column > 0 && INACTIVE_COLUMN_TO_SORT > 0 && table_name == "inactive_content_table") {
- tableItems[INACTIVE_COLUMN_TO_SORT].className = "pointer";
- tableItems[column].className = "sortThis";
- }
- if (table_name == "content_table") {
- COLUMN_TO_SORT = column;
- }
- else if (table_name == "inactive_content_table") {
- INACTIVE_COLUMN_TO_SORT = column;
- }
- var rows = table.rows;
- if (rows[1] != undefined) {
- tableHeader = rows[0];
- x = rows[1].getElementsByTagName("TD")[column];
- for (i = 1; i < rows.length; i++) {
- x = rows[i].getElementsByTagName("TD")[column];
- switch (x.childNodes[0].tagName.toLowerCase()) {
- case "input":
- xValue = x.getElementsByTagName("INPUT")[0].value.toLowerCase();
- break;
- case "p":
- xValue = x.getElementsByTagName("P")[0].innerText.toLowerCase();
- break;
- default: console.log(x.childNodes[0].tagName);
- }
- if (xValue == "") {
- xValue = i;
- sortObj[i] = rows[i];
- }
- else {
- switch (isNaN(xValue)) {
- case false:
- xValue = parseFloat(xValue);
- sortObj[xValue] = rows[i];
- break;
- case true:
- sortByString = true;
- sortObj[xValue.toLowerCase() + i] = rows[i];
- break;
- }
- }
- }
- while (table.firstChild) {
- table.removeChild(table.firstChild);
- }
- var sortValues = getObjKeys(sortObj);
- if (sortByString == true) {
- if (column == 3) {
- var collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });
- sortValues.sort(collator.compare);
- }
- else {
- sortValues.sort();
- }
- }
- else {
- function sortFloat(a, b) {
- return a - b;
- }
- sortValues.sort(sortFloat);
- }
- table.appendChild(tableHeader);
- for (var i = 0; i < sortValues.length; i++) {
- table.appendChild(sortObj[sortValues[i]]);
- }
- }
- return;
-}
-function createSearchObj() {
- SEARCH_MAPPING = new Object();
- var data = SERVER["xepg"]["epgMapping"];
- var channels = getObjKeys(data);
- var channelKeys = ["x-active", "x-channelID", "x-name", "_file.m3u.name", "x-group-title", "x-xmltv-file"];
- channels.forEach(id => {
- channelKeys.forEach(key => {
- if (key == "x-active") {
- switch (data[id][key]) {
- case true:
- SEARCH_MAPPING[id] = "online ";
- break;
- case false:
- SEARCH_MAPPING[id] = "offline ";
- break;
- }
- }
- else {
- if (key == "x-xmltv-file") {
- var xmltvFile = getValueFromProviderFile(data[id][key], "xmltv", "name");
- if (xmltvFile != undefined) {
- SEARCH_MAPPING[id] = SEARCH_MAPPING[id] + xmltvFile + " ";
- }
- }
- else {
- SEARCH_MAPPING[id] = SEARCH_MAPPING[id] + data[id][key] + " ";
- }
- }
- });
- });
- return;
-}
-function enableGroupSelection(selector) {
- var lastcheck = null; // no checkboxes clicked yet
- // get desired checkboxes
- var checkboxes = document.querySelectorAll(selector);
- // loop over checkboxes to add event listener
- Array.prototype.forEach.call(checkboxes, function (cbx, idx) {
- cbx.addEventListener('click', function (evt) {
- // test for shift key, not first checkbox, and not same checkbox
- if (evt.shiftKey && null !== lastcheck && idx !== lastcheck) {
- // get range of checks between last-checkbox and shift-checkbox
- // Math.min/max does our sorting for us
- Array.prototype.slice.call(checkboxes, Math.min(lastcheck, idx), Math.max(lastcheck, idx))
- // and loop over each
- .forEach(function (ccbx) {
- ccbx.checked = true;
- });
- }
- lastcheck = idx; // set this checkbox as last-checked for later
- });
- });
-}
-function searchInMapping() {
- var searchValue = document.getElementById("searchMapping").value;
- var trs = document.getElementById("content_table").getElementsByTagName("TR");
- for (var i = 1; i < trs.length; ++i) {
- var id = trs[i].getAttribute("id");
- var element = SEARCH_MAPPING[id];
- switch (element.toLowerCase().includes(searchValue.toLowerCase())) {
- case true:
- document.getElementById(id).style.display = "";
- break;
- case false:
- document.getElementById(id).style.display = "none";
- break;
- }
- }
- return;
-}
-function changeChannelNumbers(elements) {
- var starting_number_element = document.getElementsByName("x-channels-start")[0];
- var elems = elements.split(",");
- var starting_number = parseFloat(starting_number_element.value);
- var data = SERVER["xepg"]["epgMapping"];
- elems.forEach(element => {
- var elem = document.getElementById(element);
- var input = elem.childNodes[1].firstChild;
- input.value = starting_number.toString();
- data[element]["x-channelID"] = starting_number.toString();
- starting_number++;
- });
- if (COLUMN_TO_SORT == 1) {
- COLUMN_TO_SORT = -1;
- sortTable(1);
- }
- if (INACTIVE_COLUMN_TO_SORT == 1) {
- INACTIVE_COLUMN_TO_SORT = -1;
- sortTable(1, "inactive_content_page");
- }
-}
-function changeChannelNumber(element) {
- var dbID = element.parentNode.parentNode.id;
- var newNumber = parseFloat(element.value);
- var channelNumbers = [];
- var data = SERVER["xepg"]["epgMapping"];
- var channels = getObjKeys(data);
- if (isNaN(newNumber)) {
- alert("{{.alert.invalidChannelNumber}}");
- return;
- }
- channels.forEach(id => {
- var channelNumber = parseFloat(data[id]["x-channelID"]);
- channelNumbers.push(channelNumber);
- });
- for (var i = 0; i < channelNumbers.length; i++) {
- if (channelNumbers.indexOf(newNumber) == -1) {
- break;
- }
- if (Math.floor(newNumber) == newNumber) {
- newNumber = newNumber + 1;
- }
- else {
- newNumber = newNumber + 0.1;
- newNumber.toFixed(1);
- newNumber = Math.round(newNumber * 10) / 10;
- }
- }
- data[dbID]["x-channelID"] = newNumber.toString();
- element.value = newNumber;
- if (COLUMN_TO_SORT == 1) {
- COLUMN_TO_SORT = -1;
- sortTable(1);
- }
- if (INACTIVE_COLUMN_TO_SORT == 1) {
- INACTIVE_COLUMN_TO_SORT = -1;
- sortTable(1, "inactive_content_page");
- }
- return;
-}
-function backup() {
- var data = new Object();
- console.log("Backup data");
- var cmd = "ThreadfinBackup";
- console.log("SEND TO SERVER");
- console.log(data);
- var server = new Server(cmd);
- server.request(data);
- return;
-}
-function toggleChannelStatus(id) {
- var element;
- var status;
- if (document.getElementById("active")) {
- var checkbox = document.getElementById("active");
- status = (checkbox).checked;
- }
- var ids = getAllSelectedChannels();
- if (ids.length == 0) {
- ids.push(id);
- }
- ids.forEach(id => {
- var channel = SERVER["xepg"]["epgMapping"][id];
- channel["x-active"] = status;
- switch (channel["x-active"]) {
- case true:
- if (channel["x-xmltv-file"] == "-" || channel["x-mapping"] == "-") {
- if (BULK_EDIT == false) {
- // alert(channel["x-name"] + ": Missing XMLTV file / channel")
- checkbox.checked = true;
- }
- channel["x-active"] = true;
- }
- break;
- case false:
- // code...
- break;
- }
- if (channel["x-active"] == false) {
- document.getElementById(id).className = "notActiveEPG";
- }
- else {
- document.getElementById(id).className = "activeEPG";
- }
- });
-}
-function restore() {
- if (document.getElementById('upload')) {
- document.getElementById('upload').remove();
- }
- var restore = document.createElement("INPUT");
- restore.setAttribute("type", "file");
- restore.setAttribute("class", "notVisible");
- restore.setAttribute("name", "");
- restore.id = "upload";
- document.body.appendChild(restore);
- restore.click();
- restore.onchange = function () {
- var filename = restore.files[0].name;
- var check = confirm("File: " + filename + "\n{{.confirm.restore}}");
- if (check == true) {
- var reader = new FileReader();
- var file = document.querySelector('input[type=file]').files[0];
- if (file) {
- reader.readAsDataURL(file);
- reader.onload = function () {
- console.log(reader.result);
- var data = new Object();
- var cmd = "ThreadfinRestore";
- data["base64"] = reader.result;
- var server = new Server(cmd);
- server.request(data);
- };
- }
- else {
- alert("File could not be loaded");
- }
- restore.remove();
- return;
- }
- };
- return;
-}
-function uploadLogo() {
- if (document.getElementById('upload')) {
- document.getElementById('upload').remove();
- }
- var upload = document.createElement("INPUT");
- upload.setAttribute("type", "file");
- upload.setAttribute("class", "notVisible");
- upload.setAttribute("name", "");
- upload.id = "upload";
- document.body.appendChild(upload);
- upload.click();
- upload.onblur = function () {
- alert();
- };
- upload.onchange = function () {
- var filename = upload.files[0].name;
- var reader = new FileReader();
- var file = document.querySelector('input[type=file]').files[0];
- if (file) {
- reader.readAsDataURL(file);
- reader.onload = function () {
- console.log(reader.result);
- var data = new Object();
- var cmd = "uploadLogo";
- data["base64"] = reader.result;
- data["filename"] = file.name;
- var server = new Server(cmd);
- server.request(data);
- var updateLogo = document.getElementById('update-icon');
- updateLogo.checked = false;
- updateLogo.className = "changed";
- };
- }
- else {
- alert("File could not be loaded");
- }
- upload.remove();
- return;
- };
-}
-function checkUndo(key) {
- switch (key) {
- case "epgMapping":
- if (UNDO.hasOwnProperty(key)) {
- SERVER["xepg"][key] = JSON.parse(JSON.stringify(UNDO[key]));
- }
- else {
- UNDO[key] = JSON.parse(JSON.stringify(SERVER["xepg"][key]));
- }
- break;
- default:
- break;
- }
- return;
-}
-function sortSelect(elem) {
- var tmpAry = [];
- var selectedValue = elem[elem.selectedIndex].value;
- for (var i = 0; i < elem.options.length; i++)
- tmpAry.push(elem.options[i]);
- tmpAry.sort(function (a, b) { return (a.text < b.text) ? -1 : 1; });
- while (elem.options.length > 0)
- elem.options[0] = null;
- var newSelectedIndex = 0;
- for (var i = 0; i < tmpAry.length; i++) {
- elem.options[i] = tmpAry[i];
- if (elem.options[i].value == selectedValue)
- newSelectedIndex = i;
- }
- elem.selectedIndex = newSelectedIndex; // Set new selected index after sorting
- return;
-}
-function updateLog() {
- console.log("TOKEN");
- var server = new Server("updateLog");
- server.request(new Object());
-}
-//# sourceMappingURL=base_ts.js.map
\ No newline at end of file
diff --git a/html/js/classes_ts.js b/html/js/classes_ts.js
deleted file mode 100644
index 80c168b..0000000
--- a/html/js/classes_ts.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
-})();
-var MainMenu = /** @class */ (function () {
- function MainMenu() {
- this.DocumentID = "main-menu";
- this.HTMLTag = "LI";
- }
- MainMenu.prototype.create = function () {
- console.log(this.DocumentID);
- };
- return MainMenu;
-}());
-var MainMenuItem = /** @class */ (function (_super) {
- __extends(MainMenuItem, _super);
- function MainMenuItem() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- MainMenuItem.prototype.create2 = function () {
- var element = document.createElement(this.HTMLTag);
- element.innerText = this.Value;
- console.log(element);
- };
- return MainMenuItem;
-}(MainMenu));
-function pageReady() {
- var item = new MainMenuItem();
- item.Value = "Test";
- item.create2();
-}
diff --git a/html/js/configuration_ts.js b/html/js/configuration_ts.js
deleted file mode 100644
index af39951..0000000
--- a/html/js/configuration_ts.js
+++ /dev/null
@@ -1,131 +0,0 @@
-class WizardCategory {
- constructor() {
- this.DocumentID = "content";
- }
- createCategoryHeadline(value) {
- var element = document.createElement("H4");
- element.innerHTML = value;
- return element;
- }
-}
-class WizardItem extends WizardCategory {
- constructor(key, headline) {
- super();
- this.headline = headline;
- this.key = key;
- }
- createWizard() {
- var headline = this.createCategoryHeadline(this.headline);
- var key = this.key;
- var content = new PopupContent();
- var description;
- var doc = document.getElementById(this.DocumentID);
- doc.innerHTML = "";
- doc.appendChild(headline);
- switch (key) {
- case "tuner":
- var text = new Array();
- var values = new Array();
- for (var i = 1; i <= 100; i++) {
- text.push(i);
- values.push(i);
- }
- var select = content.createSelect(text, values, "1", key);
- select.setAttribute("class", "wizard");
- select.id = key;
- doc.appendChild(select);
- description = "{{.wizard.tuner.description}}";
- break;
- case "epgSource":
- var text = ["PMS", "XEPG"];
- var values = ["PMS", "XEPG"];
- var select = content.createSelect(text, values, "XEPG", key);
- select.setAttribute("class", "wizard");
- select.id = key;
- doc.appendChild(select);
- description = "{{.wizard.epgSource.description}}";
- break;
- case "m3u":
- var input = content.createInput("text", key, "");
- input.setAttribute("placeholder", "{{.wizard.m3u.placeholder}}");
- input.setAttribute("class", "wizard");
- input.id = key;
- doc.appendChild(input);
- description = "{{.wizard.m3u.description}}";
- break;
- case "xmltv":
- var input = content.createInput("text", key, "");
- input.setAttribute("placeholder", "{{.wizard.xmltv.placeholder}}");
- input.setAttribute("class", "wizard");
- input.id = key;
- doc.appendChild(input);
- description = "{{.wizard.xmltv.description}}";
- break;
- default:
- console.log(key);
- break;
- }
- var pre = document.createElement("PRE");
- pre.innerHTML = description;
- doc.appendChild(pre);
- console.log(headline, key);
- }
-}
-function readyForConfiguration(wizard) {
- var server = new Server("getServerConfig");
- server.request(new Object());
- showElement("loading", false);
- configurationWizard[wizard].createWizard();
-}
-function saveWizard() {
- var cmd = "saveWizard";
- var div = document.getElementById("content");
- var config = div.getElementsByClassName("wizard");
- var wizard = new Object();
- for (var i = 0; i < config.length; i++) {
- var name;
- var value;
- switch (config[i].tagName) {
- case "SELECT":
- name = config[i].name;
- value = config[i].value;
- // Wenn der Wert eine Zahl ist, wird dieser als Zahl gespeichert
- if (isNaN(value)) {
- wizard[name] = value;
- }
- else {
- wizard[name] = parseInt(value);
- }
- break;
- case "INPUT":
- switch (config[i].type) {
- case "text":
- name = config[i].name;
- value = config[i].value;
- if (value.length == 0) {
- var msg = name.toUpperCase() + ": " + "{{.alert.missingInput}}";
- alert(msg);
- return;
- }
- wizard[name] = value;
- break;
- }
- break;
- default:
- // code...
- break;
- }
- }
- var data = new Object();
- data["wizard"] = wizard;
- var server = new Server(cmd);
- server.request(data);
- console.log(data);
-}
-// Wizard
-var configurationWizard = new Array();
-configurationWizard.push(new WizardItem("tuner", "{{.wizard.tuner.title}}"));
-configurationWizard.push(new WizardItem("epgSource", "{{.wizard.epgSource.title}}"));
-configurationWizard.push(new WizardItem("m3u", "{{.wizard.m3u.title}}"));
-configurationWizard.push(new WizardItem("xmltv", "{{.wizard.xmltv.title}}"));
-//# sourceMappingURL=configuration_ts.js.map
\ No newline at end of file
diff --git a/html/js/logs_ts.js b/html/js/logs_ts.js
deleted file mode 100644
index 141f9a1..0000000
--- a/html/js/logs_ts.js
+++ /dev/null
@@ -1,40 +0,0 @@
-class Log {
- createLog(entry) {
- var element = document.createElement("PRE");
- if (entry.indexOf("WARNING") != -1) {
- element.className = "warningMsg";
- }
- if (entry.indexOf("ERROR") != -1) {
- element.className = "errorMsg";
- }
- if (entry.indexOf("DEBUG") != -1) {
- element.className = "debugMsg";
- }
- element.innerHTML = entry;
- return element;
- }
-}
-function showLogs(bottom) {
- var log = new Log();
- var logs = SERVER["log"]["log"];
- var div = document.getElementById("content_log");
- div.innerHTML = "";
- var keys = getObjKeys(logs);
- keys.forEach(logID => {
- var entry = log.createLog(logs[logID]);
- div.append(entry);
- });
- setTimeout(function () {
- if (bottom == true) {
- var wrapper = document.getElementById("box-wrapper");
- wrapper.scrollTop = wrapper.scrollHeight;
- }
- }, 10);
-}
-function resetLogs() {
- var cmd = "resetLogs";
- var data = new Object();
- var server = new Server(cmd);
- server.request(data);
-}
-//# sourceMappingURL=logs_ts.js.map
\ No newline at end of file
diff --git a/html/js/menu_ts.js b/html/js/menu_ts.js
deleted file mode 100644
index 60c7405..0000000
--- a/html/js/menu_ts.js
+++ /dev/null
@@ -1,2162 +0,0 @@
-class MainMenu {
- constructor() {
- this.DocumentID = "main-menu";
- this.HTMLTag = "LI";
- this.ImagePath = "img/";
- }
- createIMG(src) {
- var element = document.createElement("IMG");
- element.setAttribute("src", this.ImagePath + src);
- return element;
- }
- createValue(value) {
- var element = document.createElement("P");
- element.innerHTML = value;
- return element;
- }
-}
-class MainMenuItem extends MainMenu {
- constructor(menuKey, value, image, headline) {
- super();
- this.menuKey = menuKey;
- this.value = value;
- this.imgSrc = image;
- this.headline = headline;
- }
- createItem() {
- var item = document.createElement("LI");
- item.setAttribute("onclick", "javascript: openThisMenu(this)");
- item.setAttribute("id", this.id);
- item.setAttribute("class", "nav-item");
- var img = this.createIMG(this.imgSrc);
- var value = this.createValue(this.value);
- item.appendChild(img);
- item.appendChild(value);
- var doc = document.getElementById(this.DocumentID);
- doc.appendChild(item);
- switch (this.menuKey) {
- case "playlist":
- this.tableHeader = ["{{.playlist.table.playlist}}", "{{.playlist.table.tuner}}", "{{.playlist.table.lastUpdate}}", "{{.playlist.table.availability}} %", "{{.playlist.table.type}}", "{{.playlist.table.streams}}", "{{.playlist.table.groupTitle}} %", "{{.playlist.table.tvgID}} %", "{{.playlist.table.uniqueID}} %"];
- break;
- case "xmltv":
- this.tableHeader = ["{{.xmltv.table.guide}}", "{{.xmltv.table.lastUpdate}}", "{{.xmltv.table.availability}} %", "{{.xmltv.table.channels}}", "{{.xmltv.table.programs}}"];
- break;
- case "filter":
- this.tableHeader = ["{{.filter.table.name}}", "{{.filter.table.type}}", "{{.filter.table.filter}}"];
- break;
- case "users":
- this.tableHeader = ["{{.users.table.username}}", "{{.users.table.password}}", "{{.users.table.web}}", "{{.users.table.pms}}", "{{.users.table.m3u}}", "{{.users.table.xml}}", "{{.users.table.api}}"];
- break;
- case "mapping":
- this.tableHeader = ["BULK", "{{.mapping.table.chNo}}", "{{.mapping.table.logo}}", "{{.mapping.table.channelName}}", "{{.mapping.table.playlist}}", "{{.mapping.table.groupTitle}}", "{{.mapping.table.xmltvFile}}", "{{.mapping.table.xmltvID}}"];
- break;
- }
- //console.log(this.menuKey, this.tableHeader);
- }
-}
-class Content {
- constructor() {
- this.DocumentID = "content";
- this.HeaderID = "popup_header";
- this.FooterID = "popup_footer";
- this.TableID = "content_table";
- this.InactiveTableID = "inactive_content_table";
- this.headerClass = "content_table_header";
- this.headerClassInactive = "inactive_content_table_header";
- this.interactionID = "content-interaction";
- }
- createHeadline(value) {
- var element = document.createElement("H3");
- element.innerHTML = value;
- return element;
- }
- createHR() {
- var element = document.createElement("HR");
- return element;
- }
- createBR() {
- var element = document.createElement("BR");
- return element;
- }
- createInteraction() {
- var element = document.createElement("DIV");
- element.setAttribute("id", this.interactionID);
- return element;
- }
- createDIV() {
- var element = document.createElement("DIV");
- element.id = this.DivID;
- return element;
- }
- createTABLE() {
- var element = document.createElement("TABLE");
- element.setAttribute('class', 'table');
- element.id = this.TableID;
- return element;
- }
- createTableRow() {
- var element = document.createElement("TR");
- element.className = this.headerClass;
- return element;
- }
- createInactiveTABLE() {
- var element = document.createElement("TABLE");
- element.id = this.InactiveTableID;
- return element;
- }
- createInactiveTableRow() {
- var element = document.createElement("TR");
- element.className = this.headerClassInactive;
- return element;
- }
- createTableContent(menuKey) {
- var data = new Object();
- var rows = new Array();
- switch (menuKey) {
- case "playlist":
- var fileTypes = new Array("m3u", "hdhr");
- fileTypes.forEach(fileType => {
- data = SERVER["settings"]["files"][fileType];
- var keys = getObjKeys(data);
- keys.forEach(key => {
- var tr = document.createElement("TR");
- tr.id = key;
- tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)');
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["name"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (SERVER["settings"]["buffer"] != "-") {
- cell.value = data[key]["tuner"];
- }
- else {
- cell.value = "-";
- }
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["last.update"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["provider.availability"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["type"].toUpperCase();
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["compatibility"]["streams"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["compatibility"]["group.title"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["compatibility"]["tvg.id"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["compatibility"]["stream.id"];
- tr.appendChild(cell.createCell());
- rows.push(tr);
- });
- });
- break;
- case "filter":
- delete SERVER["settings"]["filter"][-1];
- data = SERVER["settings"]["filter"];
- var keys = getObjKeys(data);
- keys.forEach(key => {
- var tr = document.createElement("TR");
- tr.id = key;
- tr.setAttribute('onclick', 'javascript: openPopUp("' + data[key]["type"] + '", this)');
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["name"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- switch (data[key]["type"]) {
- case "custom-filter":
- cell.value = "{{.filter.custom}}";
- break;
- case "group-title":
- cell.value = "{{.filter.group}}";
- break;
- default:
- break;
- }
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["filter"];
- tr.appendChild(cell.createCell());
- rows.push(tr);
- });
- break;
- case "xmltv":
- var fileTypes = new Array("xmltv");
- fileTypes.forEach(fileType => {
- data = SERVER["settings"]["files"][fileType];
- var keys = getObjKeys(data);
- keys.forEach(key => {
- var tr = document.createElement("TR");
- tr.id = key;
- tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)');
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["name"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["last.update"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["provider.availability"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["compatibility"]["xmltv.channels"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["compatibility"]["xmltv.programs"];
- tr.appendChild(cell.createCell());
- rows.push(tr);
- });
- });
- break;
- case "users":
- var fileTypes = new Array("users");
- fileTypes.forEach(fileType => {
- data = SERVER[fileType];
- var keys = getObjKeys(data);
- keys.forEach(key => {
- var tr = document.createElement("TR");
- tr.id = key;
- tr.setAttribute('onclick', 'javascript: openPopUp("' + fileType + '", this)');
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["data"]["username"];
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = "******";
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["data"]["authentication.web"] == true) {
- cell.value = "✓";
- }
- else {
- cell.value = "-";
- }
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["data"]["authentication.pms"] == true) {
- cell.value = "✓";
- }
- else {
- cell.value = "-";
- }
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["data"]["authentication.m3u"] == true) {
- cell.value = "✓";
- }
- else {
- cell.value = "-";
- }
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["data"]["authentication.xml"] == true) {
- cell.value = "✓";
- }
- else {
- cell.value = "-";
- }
- tr.appendChild(cell.createCell());
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["data"]["authentication.api"] == true) {
- cell.value = "✓";
- }
- else {
- cell.value = "-";
- }
- tr.appendChild(cell.createCell());
- rows.push(tr);
- });
- });
- break;
- case "mapping":
- BULK_EDIT = false;
- createSearchObj();
- checkUndo("epgMapping");
- console.log("MAPPING");
- data = SERVER["xepg"]["epgMapping"];
- var keys = getObjKeys(data);
- keys.forEach(key => {
- if (data[key]["x-active"]) {
- var tr = document.createElement("TR");
- tr.id = key;
- tr.className = "activeEPG";
- // Bulk
- var cell = new Cell();
- cell.child = true;
- cell.childType = "BULK";
- cell.value = false;
- tr.appendChild(cell.createCell());
- // Kanalnummer
- var cell = new Cell();
- cell.child = true;
- cell.childType = "INPUTCHANNEL";
- cell.value = data[key]["x-channelID"];
- //td.setAttribute('onclick', 'javascript: changeChannelNumber("' + key + '", this)')
- tr.appendChild(cell.createCell());
- // Logo
- var cell = new Cell();
- cell.child = true;
- cell.childType = "IMG";
- cell.imageURL = data[key]["tvg-logo"];
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // Kanalname
- var cell = new Cell();
- var cats = data[key]["x-category"].split(":");
- cell.child = true;
- cell.childType = "P";
- cell.className = "category";
- var catColorSettings = SERVER["settings"]["epgCategoriesColors"];
- var colors_split = catColorSettings.split("|");
- for (var i = 0; i < colors_split.length; i++) {
- var catsColor_split = colors_split[i].split(":");
- if (catsColor_split[0] == cats[0]) {
- cell.classColor = catsColor_split[1];
- }
- }
- cell.value = data[key]["x-name"];
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // Playlist
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- //cell.value = data[key]["_file.m3u.name"]
- cell.value = getValueFromProviderFile(data[key]["_file.m3u.id"], "m3u", "name");
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // Gruppe (group-title)
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["x-group-title"];
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // XMLTV Datei
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["x-xmltv-file"] != "-") {
- cell.value = getValueFromProviderFile(data[key]["x-xmltv-file"], "xmltv", "name");
- }
- else {
- cell.value = data[key]["x-xmltv-file"];
- }
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // XMLTV Kanal
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- //var value = str.substring(1, 4);
- var value = data[key]["x-mapping"];
- if (value.length > 20) {
- value = data[key]["x-mapping"].substring(0, 20) + "...";
- }
- cell.value = value;
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- rows.push(tr);
- }
- });
- break;
- case "settings":
- alert();
- break;
- default:
- console.log("Table content (menuKey):", menuKey);
- break;
- }
- return rows;
- }
- createInactiveTableContent(menuKey) {
- var data = new Object();
- var rows = new Array();
- switch (menuKey) {
- case "mapping":
- BULK_EDIT = false;
- createSearchObj();
- checkUndo("epgMapping");
- console.log("MAPPING");
- data = SERVER["xepg"]["epgMapping"];
- var keys = getObjKeys(data);
- keys.forEach(key => {
- if (data[key]["x-active"] === false) {
- var tr = document.createElement("TR");
- tr.id = key;
- tr.className = "notActiveEPG";
- // Bulk
- var cell = new Cell();
- cell.child = true;
- cell.childType = "BULK";
- cell.value = false;
- tr.appendChild(cell.createCell());
- // Kanalnummer
- var cell = new Cell();
- cell.child = true;
- cell.childType = "INPUTCHANNEL";
- if (data[key]["x-active"] == true) {
- cell.value = data[key]["x-channelID"];
- }
- else {
- cell.value = data[key]["x-channelID"] * 10;
- }
- //td.setAttribute('onclick', 'javascript: changeChannelNumber("' + key + '", this)')
- tr.appendChild(cell.createCell());
- // Logo
- var cell = new Cell();
- cell.child = true;
- cell.childType = "IMG";
- cell.imageURL = data[key]["tvg-logo"];
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // Kanalname
- var cell = new Cell();
- var cats = data[key]["x-category"].split(":");
- cell.child = true;
- cell.childType = "P";
- cell.className = "category";
- var catColorSettings = SERVER["settings"]["epgCategoriesColors"];
- var colors_split = catColorSettings.split("|");
- for (var i = 0; i < colors_split.length; i++) {
- var catsColor_split = colors_split[i].split(":");
- if (catsColor_split[0] == cats[0]) {
- cell.classColor = catsColor_split[1];
- }
- }
- cell.value = data[key]["x-name"];
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // Playlist
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- //cell.value = data[key]["_file.m3u.name"]
- cell.value = getValueFromProviderFile(data[key]["_file.m3u.id"], "m3u", "name");
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // Gruppe (group-title)
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = data[key]["x-group-title"];
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // XMLTV Datei
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- if (data[key]["x-xmltv-file"] != "-") {
- cell.value = getValueFromProviderFile(data[key]["x-xmltv-file"], "xmltv", "name");
- }
- else {
- cell.value = data[key]["x-xmltv-file"];
- }
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- // XMLTV Kanal
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- //var value = str.substring(1, 4);
- var value = data[key]["x-mapping"];
- if (value.length > 20) {
- value = data[key]["x-mapping"].substring(0, 20) + "...";
- }
- cell.value = value;
- var td = cell.createCell();
- td.setAttribute('onclick', 'javascript: openPopUp("mapping", this)');
- td.id = key;
- tr.appendChild(td);
- rows.push(tr);
- }
- });
- break;
- case "settings":
- alert();
- break;
- default:
- console.log("Table content (menuKey):", menuKey);
- break;
- }
- return rows;
- }
-}
-class Cell {
- createCell() {
- var td = document.createElement("TD");
- if (this.child == true) {
- var element;
- switch (this.childType) {
- case "P":
- element = document.createElement(this.childType);
- element.innerHTML = this.value;
- element.className = this.className;
- if (this.classColor) {
- element.style.borderColor = this.classColor;
- }
- break;
- case "INPUT":
- element = document.createElement(this.childType);
- element.value = this.value;
- element.type = "text";
- break;
- case "INPUTCHANNEL":
- element = document.createElement("INPUT");
- element.setAttribute("onchange", "javscript: changeChannelNumber(this)");
- element.value = this.value;
- element.type = "text";
- break;
- case "BULK":
- element = document.createElement("INPUT");
- element.checked = this.value;
- element.type = "checkbox";
- element.className = "bulk hideBulk";
- break;
- case "BULK_HEAD":
- element = document.createElement("INPUT");
- element.checked = this.value;
- element.type = "checkbox";
- element.className = "bulk hideBulk";
- if (this.active) {
- element.setAttribute("onclick", "javascript: selectAllChannels()");
- }
- else {
- element.setAttribute("onclick", "javascript: selectAllChannels('inactive_content_table')");
- }
- break;
- case "IMG":
- element = document.createElement(this.childType);
- element.setAttribute("src", this.imageURL);
- if (this.imageURL != "") {
- element.setAttribute("onerror", "javascript: this.onerror=null;this.src=''");
- //onerror="this.onerror=null;this.src='missing.gif';"
- }
- }
- td.appendChild(element);
- }
- else {
- td.innerHTML = this.value;
- }
- if (this.onclick == true) {
- td.setAttribute("onclick", this.onclickFunktion);
- td.className = "pointer";
- }
- if (this.tdClassName != undefined) {
- td.className = this.tdClassName;
- }
- return td;
- }
-}
-class ShowContent extends Content {
- constructor(menuID) {
- super();
- this.menuID = menuID;
- }
- createInput(type, name, value) {
- var input = document.createElement("INPUT");
- input.setAttribute("type", type);
- input.setAttribute("name", name);
- input.setAttribute("value", value);
- return input;
- }
- show() {
- COLUMN_TO_SORT = -1;
- // Alten Inhalt löschen
- var doc = document.getElementById(this.DocumentID);
- doc.innerHTML = "";
- showPreview(false);
- // Überschrift
- var popup_header = document.getElementById(this.HeaderID);
- var headline = menuItems[this.menuID].headline;
- var menuKey = menuItems[this.menuID].menuKey;
- var h = this.createHeadline(headline);
- var existingHeader = popup_header.querySelector('h3');
- if (existingHeader) {
- popup_header.replaceChild(h, existingHeader);
- }
- else {
- popup_header.appendChild(h);
- }
- var hr = this.createHR();
- doc.appendChild(hr);
- // Interaktion
- var div = this.createInteraction();
- doc.appendChild(div);
- var interaction = document.getElementById(this.interactionID);
- switch (menuKey) {
- case "playlist":
- var input = this.createInput("button", menuKey, "{{.button.new}}");
- input.setAttribute("id", "-");
- input.setAttribute("onclick", 'javascript: openPopUp("playlist")');
- input.setAttribute('data-bs-toggle', 'modal');
- input.setAttribute('data-bs-target', '#popup');
- interaction.appendChild(input);
- break;
- case "filter":
- var input = this.createInput("button", menuKey, "{{.button.new}}");
- input.setAttribute("id", -1);
- input.setAttribute("onclick", 'javascript: openPopUp("filter", this)');
- input.setAttribute('data-bs-toggle', 'modal');
- input.setAttribute('data-bs-target', '#popup');
- interaction.appendChild(input);
- break;
- case "xmltv":
- var input = this.createInput("button", menuKey, "{{.button.new}}");
- input.setAttribute("id", "xmltv");
- input.setAttribute("onclick", 'javascript: openPopUp("xmltv")');
- input.setAttribute('data-bs-toggle', 'modal');
- input.setAttribute('data-bs-target', '#popup');
- interaction.appendChild(input);
- break;
- case "users":
- var input = this.createInput("button", menuKey, "{{.button.new}}");
- input.setAttribute("id", "users");
- input.setAttribute("onclick", 'javascript: openPopUp("users")');
- input.setAttribute('data-bs-toggle', 'modal');
- input.setAttribute('data-bs-target', '#popup');
- interaction.appendChild(input);
- break;
- case "mapping":
- // showElement("loading", true)
- var input = this.createInput("button", menuKey, "{{.button.save}}");
- input.setAttribute("onclick", 'javascript: savePopupData("mapping", "", "")');
- interaction.appendChild(input);
- var input = this.createInput("button", menuKey, "{{.button.bulkEdit}}");
- input.setAttribute("onclick", 'javascript: bulkEdit()');
- interaction.appendChild(input);
- var input = this.createInput("search", "search", "");
- input.setAttribute("id", "searchMapping");
- input.setAttribute("placeholder", "{{.button.search}}");
- input.className = "search";
- input.setAttribute("onchange", 'javascript: searchInMapping()');
- interaction.appendChild(input);
- break;
- case "settings":
- var input = this.createInput("button", menuKey, "{{.button.save}}");
- input.setAttribute("onclick", 'javascript: saveSettings();');
- interaction.appendChild(input);
- var input = this.createInput("button", menuKey, "{{.button.backup}}");
- input.setAttribute("onclick", 'javascript: backup();');
- interaction.appendChild(input);
- var input = this.createInput("button", menuKey, "{{.button.restore}}");
- input.setAttribute("onclick", 'javascript: restore();');
- interaction.appendChild(input);
- var wrapper = document.createElement("DIV");
- wrapper.setAttribute("id", "box-wrapper");
- doc.appendChild(wrapper);
- this.DivID = "content_settings";
- var settings = this.createDIV();
- wrapper.appendChild(settings);
- showSettings();
- return;
- break;
- case "log":
- var input = this.createInput("button", menuKey, "{{.button.resetLogs}}");
- input.setAttribute("onclick", 'javascript: resetLogs();');
- interaction.appendChild(input);
- var wrapper = document.createElement("DIV");
- wrapper.setAttribute("id", "box-wrapper");
- doc.appendChild(wrapper);
- this.DivID = "content_log";
- var logs = this.createDIV();
- wrapper.appendChild(logs);
- showLogs(true);
- return;
- break;
- case "logout":
- location.reload();
- document.cookie = "Token= ; expires = Thu, 01 Jan 1970 00:00:00 GMT";
- break;
- default:
- console.log("Show content (menuKey):", menuKey);
- break;
- }
- // Tabelle erstellen (falls benötigt)
- var tableHeader = menuItems[this.menuID].tableHeader;
- if (tableHeader.length > 0) {
- var wrapper = document.createElement("DIV");
- doc.appendChild(wrapper);
- wrapper.setAttribute("id", "box-wrapper");
- var table = this.createTABLE();
- wrapper.appendChild(table);
- var header = this.createTableRow();
- table.appendChild(header);
- // Kopfzeile der Tablle
- tableHeader.forEach(element => {
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = element;
- if (element == "BULK") {
- cell.childType = "BULK_HEAD";
- cell.active = true;
- cell.value = false;
- }
- if (menuKey == "mapping") {
- if (element == "{{.mapping.table.chNo}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(1);";
- cell.tdClassName = "sortThis";
- }
- if (element == "{{.mapping.table.channelName}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(3);";
- }
- if (element == "{{.mapping.table.playlist}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(4);";
- }
- if (element == "{{.mapping.table.groupTitle}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(5);";
- }
- }
- header.appendChild(cell.createCell());
- });
- table.appendChild(header);
- // Inhalt der Tabelle
- var rows = this.createTableContent(menuKey);
- rows.forEach(tr => {
- table.appendChild(tr);
- });
- var br = this.createBR();
- doc.appendChild(br);
- // Create inactive channels for mapping
- if (menuKey == "mapping") {
- var inactivetable = this.createInactiveTABLE();
- wrapper.appendChild(inactivetable);
- var header = this.createInactiveTableRow();
- inactivetable.appendChild(header);
- // Kopfzeile der Tablle
- tableHeader.forEach(element => {
- var cell = new Cell();
- cell.child = true;
- cell.childType = "P";
- cell.value = element;
- if (element == "BULK") {
- cell.childType = "BULK_HEAD";
- cell.active = false;
- cell.value = false;
- }
- if (menuKey == "mapping") {
- if (element == "{{.mapping.table.chNo}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(1, 'inactive_content_table');";
- cell.tdClassName = "sortThis";
- }
- if (element == "{{.mapping.table.channelName}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(3, 'inactive_content_table');";
- }
- if (element == "{{.mapping.table.playlist}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(4, 'inactive_content_table');";
- }
- if (element == "{{.mapping.table.groupTitle}}") {
- cell.onclick = true;
- cell.onclickFunktion = "javascript: sortTable(5, 'inactive_content_table');";
- }
- }
- header.appendChild(cell.createCell());
- });
- inactivetable.appendChild(header);
- // Inhalt der Tabelle
- var rows = this.createInactiveTableContent(menuKey);
- rows.forEach(tr => {
- inactivetable.appendChild(tr);
- });
- savePopupData("mapping", "", false, 0);
- }
- }
- switch (menuKey) {
- case "mapping":
- sortTable(1);
- sortTable(1, "inactive_content_table");
- break;
- case "filter":
- showPreview(true);
- sortTable(0);
- break;
- default:
- COLUMN_TO_SORT = -1;
- sortTable(0);
- break;
- }
- showElement("loading", false);
- }
-}
-function PageReady() {
- var server = new Server("getServerConfig");
- server.request(new Object());
- setInterval(function () {
- updateLog();
- }, 10000);
- return;
-}
-function createLayout() {
- // Client Info
- var obj = SERVER["clientInfo"];
- var keys = getObjKeys(obj);
- for (var i = 0; i < keys.length; i++) {
- if (document.getElementById(keys[i])) {
- document.getElementById(keys[i]).value = obj[keys[i]];
- }
- }
- if (!document.getElementById("main-menu")) {
- return;
- }
- // Menü erstellen
- document.getElementById("main-menu").innerHTML = "";
- for (let i = 0; i < menuItems.length; i++) {
- menuItems[i].id = i;
- switch (menuItems[i]["menuKey"]) {
- case "users":
- case "logout":
- if (SERVER["settings"]["authentication.web"] == true) {
- menuItems[i].createItem();
- }
- break;
- case "mapping":
- case "xmltv":
- menuItems[i].createItem();
- break;
- default:
- menuItems[i].createItem();
- break;
- }
- }
- return;
-}
-function openThisMenu(element) {
- var id = element.id;
- var content = new ShowContent(id);
- content.show();
- enableGroupSelection(".bulk");
- return;
-}
-class PopupWindow {
- constructor() {
- this.DocumentID = "popup-custom";
- this.InteractionID = "interaction";
- this.doc = document.getElementById(this.DocumentID);
- }
- createTitle(title) {
- var td = document.createElement("TD");
- td.className = "left";
- td.innerHTML = title + ":";
- return td;
- }
- createContent(element) {
- var td = document.createElement("TD");
- td.appendChild(element);
- return td;
- }
- createInteraction() {
- var div = document.createElement("div");
- div.setAttribute("id", "popup-interaction");
- div.className = "interaction";
- this.doc.appendChild(div);
- }
-}
-class PopupContent extends PopupWindow {
- constructor() {
- super(...arguments);
- this.table = document.createElement("TABLE");
- }
- createHeadline(headline) {
- this.doc.innerHTML = "";
- var element = document.createElement("H3");
- element.innerHTML = headline.toUpperCase();
- this.doc.appendChild(element);
- // Tabelle erstellen
- this.table = document.createElement("TABLE");
- this.doc.appendChild(this.table);
- }
- appendRow(title, element) {
- var tr = document.createElement("TR");
- // Bezeichnung
- if (title.length != 0) {
- tr.appendChild(this.createTitle(title));
- }
- // Content
- tr.appendChild(this.createContent(element));
- this.table.appendChild(tr);
- }
- createInput(type, name, value) {
- var input = document.createElement("INPUT");
- if (value == undefined) {
- value = "";
- }
- input.setAttribute("type", type);
- input.setAttribute("name", name);
- input.setAttribute("value", value);
- return input;
- }
- createCheckbox(name) {
- var input = document.createElement("INPUT");
- input.setAttribute("type", "checkbox");
- input.setAttribute("name", name);
- return input;
- }
- createSelect(text, values, set, dbKey) {
- var select = document.createElement("SELECT");
- select.setAttribute("name", dbKey);
- for (let i = 0; i < text.length; i++) {
- var option = document.createElement("OPTION");
- option.setAttribute("value", values[i]);
- option.innerText = text[i];
- select.appendChild(option);
- }
- if (set != "") {
- select.value = set;
- }
- if (set == undefined) {
- select.value = values[0];
- }
- return select;
- }
- selectOption(select, value) {
- //select.selectedOptions = value
- var s = select;
- s.options[s.selectedIndex].value = value;
- return select;
- }
- description(value) {
- var tr = document.createElement("TR");
- var td = document.createElement("TD");
- var span = document.createElement("PRE");
- span.innerHTML = value;
- tr.appendChild(td);
- tr.appendChild(this.createContent(span));
- this.table.appendChild(tr);
- }
- // Interaktion
- addInteraction(element) {
- var interaction = document.getElementById("popup-interaction");
- interaction.appendChild(element);
- }
-}
-function openPopUp(dataType, element) {
- var data = new Object();
- var id;
- switch (element) {
- case undefined:
- switch (dataType) {
- case "group-title":
- if (id == undefined) {
- id = -1;
- }
- data = getLocalData("filter", id);
- data["type"] = "group-title";
- break;
- case "custom-filter":
- if (id == undefined) {
- id = -1;
- }
- data = getLocalData("filter", id);
- data["type"] = "custom-filter";
- break;
- default:
- data["id.provider"] = "-";
- data["type"] = dataType;
- id = "-";
- break;
- }
- break;
- default:
- id = element.id;
- data = getLocalData(dataType, id);
- break;
- }
- var content = new PopupContent();
- switch (dataType) {
- case "playlist":
- content.createHeadline("{{.playlist.playlistType.title}}");
- // Type
- var text = ["M3U", "HDHomeRun"];
- var values = ["javascript: openPopUp('m3u')", "javascript: openPopUp('hdhr')"];
- var select = content.createSelect(text, values, "", "type");
- select.setAttribute("id", "type");
- select.setAttribute("onchange", 'javascript: changeButtonAction(this, "next", "onclick")'); // changeButtonAction
- content.appendRow("{{.playlist.type.title}}", select);
- // Interaktion
- content.createInteraction();
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Weiter
- var input = content.createInput("button", "next", "{{.button.next}}");
- input.setAttribute("onclick", 'javascript: openPopUp("m3u")');
- input.setAttribute("id", 'next');
- content.addInteraction(input);
- break;
- case "m3u":
- content.createHeadline(dataType);
- // Name
- var dbKey = "name";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.playlist.name.placeholder}}");
- content.appendRow("{{.playlist.name.title}}", input);
- // Beschreibung
- var dbKey = "description";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.playlist.description.placeholder}}");
- content.appendRow("{{.playlist.description.title}}", input);
- // URL
- var dbKey = "file.source";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.playlist.fileM3U.placeholder}}");
- content.appendRow("{{.playlist.fileM3U.title}}", input);
- // Tuner
- if (SERVER["settings"]["buffer"] != "-") {
- var text = new Array();
- var values = new Array();
- for (var i = 1; i <= 100; i++) {
- text.push(i.toString());
- values.push(i.toString());
- }
- var dbKey = "tuner";
- var select = content.createSelect(text, values, data[dbKey], dbKey);
- select.setAttribute("onfocus", "javascript: return;");
- content.appendRow("{{.playlist.tuner.title}}", select);
- }
- else {
- var dbKey = "tuner";
- if (data[dbKey] == undefined) {
- data[dbKey] = 1;
- }
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("readonly", "true");
- input.className = "notAvailable";
- content.appendRow("{{.playlist.tuner.title}}", input);
- }
- content.description("{{.playlist.tuner.description}}");
- // Interaktion
- content.createInteraction();
- // Löschen
- if (data["id.provider"] != "-") {
- var input = content.createInput("button", "delete", "{{.button.delete}}");
- input.className = "delete";
- input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", true, 0)');
- content.addInteraction(input);
- }
- else {
- var input = content.createInput("button", "back", "{{.button.back}}");
- input.setAttribute("onclick", 'javascript: openPopUp("playlist")');
- content.addInteraction(input);
- }
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Aktualisieren
- if (data["id.provider"] != "-") {
- var input = content.createInput("button", "update", "{{.button.update}}");
- input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", false, 1)');
- content.addInteraction(input);
- }
- // Speichern
- var input = content.createInput("button", "save", "{{.button.save}}");
- input.setAttribute('onclick', 'javascript: savePopupData("m3u", "' + id + '", false, 0)');
- content.addInteraction(input);
- break;
- case "hdhr":
- content.createHeadline(dataType);
- // Name
- var dbKey = "name";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.playlist.name.placeholder}}");
- content.appendRow("{{.playlist.name.title}}", input);
- // Beschreibung
- var dbKey = "description";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.playlist.description.placeholder}}");
- content.appendRow("{{.playlist.description.placeholder}}", input);
- // URL
- var dbKey = "file.source";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.playlist.fileHDHR.placeholder}}");
- content.appendRow("{{.playlist.fileHDHR.title}}", input);
- // Tuner
- if (SERVER["settings"]["buffer"] != "-") {
- var text = new Array();
- var values = new Array();
- for (var i = 1; i <= 100; i++) {
- text.push(i.toString());
- values.push(i.toString());
- }
- var dbKey = "tuner";
- var select = content.createSelect(text, values, data[dbKey], dbKey);
- select.setAttribute("onfocus", "javascript: return;");
- content.appendRow("{{.playlist.tuner.title}}", select);
- }
- else {
- var dbKey = "tuner";
- if (data[dbKey] == undefined) {
- data[dbKey] = 1;
- }
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("readonly", "true");
- input.className = "notAvailable";
- content.appendRow("{{.playlist.tuner.title}}", input);
- }
- content.description("{{.playlist.tuner.description}}");
- // Interaktion
- content.createInteraction();
- // Löschen
- if (data["id.provider"] != "-") {
- var input = content.createInput("button", "delete", "{{.button.delete}}");
- input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", true, 0)');
- input.className = "delete";
- content.addInteraction(input);
- }
- else {
- var input = content.createInput("button", "back", "{{.button.back}}");
- input.setAttribute("onclick", 'javascript: openPopUp("playlist")');
- content.addInteraction(input);
- }
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Aktualisieren
- if (data["id.provider"] != "-") {
- var input = content.createInput("button", "update", "{{.button.update}}");
- input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", false, 1)');
- content.addInteraction(input);
- }
- // Speichern
- var input = content.createInput("button", "save", "{{.button.save}}");
- input.setAttribute('onclick', 'javascript: savePopupData("hdhr", "' + id + '", false, 0)');
- content.addInteraction(input);
- break;
- case "filter":
- content.createHeadline(dataType);
- // Type
- var dbKey = "type";
- var text = ["M3U: " + "{{.filter.type.groupTitle}}", "Threadfin: " + "{{.filter.type.customFilter}}"];
- var values = ["javascript: openPopUp('group-title')", "javascript: openPopUp('custom-filter')"];
- var select = content.createSelect(text, values, "javascript: openPopUp('group-title')", dbKey);
- select.setAttribute("id", id);
- select.setAttribute("onchange", 'javascript: changeButtonAction(this, "next", "onclick");'); // changeButtonAction
- content.appendRow("{{.filter.type.title}}", select);
- // Interaktion
- content.createInteraction();
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Weiter
- var input = content.createInput("button", "next", "{{.button.next}}");
- input.setAttribute("onclick", 'javascript: openPopUp("group-title")');
- input.setAttribute("id", 'next');
- content.addInteraction(input);
- break;
- case "custom-filter":
- case "group-title":
- switch (dataType) {
- case "custom-filter":
- content.createHeadline("{{.filter.custom}}");
- break;
- case "group-title":
- content.createHeadline("{{.filter.group}}");
- break;
- }
- // Name
- var dbKey = "name";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.filter.name.placeholder}}");
- content.appendRow("{{.filter.name.title}}", input);
- // Beschreibung
- var dbKey = "description";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.filter.description.placeholder}}");
- content.appendRow("{{.filter.description.title}}", input);
- // Typ
- var dbKey = "type";
- var input = content.createInput("hidden", dbKey, data[dbKey]);
- content.appendRow("", input);
- var filterType = data[dbKey];
- switch (filterType) {
- case "custom-filter":
- // Groß- Kleinschreibung beachten
- var dbKey = "caseSensitive";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- content.appendRow("{{.filter.caseSensitive.title}}", input);
- // Filterregel (Benutzerdefiniert)
- var dbKey = "filter";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.filter.filterRule.placeholder}}");
- content.appendRow("{{.filter.filterRule.title}}", input);
- break;
- case "group-title":
- //alert(dbKey + " " + filterType)
- // Filter basierend auf den Gruppen in der M3U
- var dbKey = "filter";
- var groupsM3U = getLocalData("m3uGroups", "");
- var text = groupsM3U["text"];
- var values = groupsM3U["value"];
- var select = content.createSelect(text, values, data[dbKey], dbKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- content.appendRow("{{.filter.filterGroup.title}}", select);
- content.description("{{.filter.filterGroup.description}}");
- // Groß- Kleinschreibung beachten
- var dbKey = "caseSensitive";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- content.appendRow("{{.filter.caseSensitive.title}}", input);
- var dbKey = "include";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.filter.include.placeholder}}");
- content.appendRow("{{.filter.include.title}}", input);
- content.description("{{.filter.include.description}}");
- var dbKey = "exclude";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.filter.exclude.placeholder}}");
- content.appendRow("{{.filter.exclude.title}}", input);
- content.description("{{.filter.exclude.description}}");
- break;
- default:
- break;
- }
- // Name
- var dbKey = "startingNumber";
- if (data[dbKey] !== undefined) {
- var input = content.createInput("text", dbKey, data[dbKey]);
- }
- else {
- var input = content.createInput("text", dbKey, "1000");
- }
- input.setAttribute("placeholder", "{{.filter.startingnumber.placeholder}}");
- content.appendRow("{{.filter.startingnumber.title}}", input);
- content.description("{{.filter.startingnumber.description}}");
- var dbKey = "x-category";
- var text = ["-"];
- var values = [""];
- var epgCategories = SERVER["settings"]["epgCategories"];
- var categories = epgCategories.split("|");
- for (i = 0; i <= categories.length; i++) {
- var cat = categories[i];
- if (cat) {
- var cat_split = cat.split(":");
- text.push(cat_split[0]);
- values.push(cat_split[1]);
- }
- }
- var select = content.createSelect(text, values, data[dbKey], dbKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- content.appendRow("{{.filter.category.title}}", select);
- // Interaktion
- content.createInteraction();
- // Löschen
- var input = content.createInput("button", "delete", "{{.button.delete}}");
- input.setAttribute('onclick', 'javascript: savePopupData("filter", "' + id + '", true, 0)');
- input.className = "delete";
- content.addInteraction(input);
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Speichern
- var input = content.createInput("button", "save", "{{.button.save}}");
- input.setAttribute('onclick', 'javascript: savePopupData("filter", "' + id + '", false, 0)');
- content.addInteraction(input);
- break;
- case "xmltv":
- content.createHeadline(dataType);
- // Name
- var dbKey = "name";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.xmltv.name.placeholder}}");
- content.appendRow("{{.xmltv.name.title}}", input);
- // Beschreibung
- var dbKey = "description";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.xmltv.description.placeholder}}");
- content.appendRow("{{.xmltv.description.title}}", input);
- // URL
- var dbKey = "file.source";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.xmltv.fileXMLTV.placeholder}}");
- content.appendRow("{{.xmltv.fileXMLTV.title}}", input);
- // Interaktion
- content.createInteraction();
- // Löschen
- if (data["id.provider"] != "-") {
- var input = content.createInput("button", "delete", "{{.button.delete}}");
- input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", true, 0)');
- input.className = "delete";
- content.addInteraction(input);
- }
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Aktualisieren
- if (data["id.provider"] != "-") {
- var input = content.createInput("button", "update", "{{.button.update}}");
- input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", false, 1)');
- content.addInteraction(input);
- }
- // Speichern
- var input = content.createInput("button", "save", "{{.button.save}}");
- input.setAttribute('onclick', 'javascript: savePopupData("xmltv", "' + id + '", false, 0)');
- content.addInteraction(input);
- break;
- case "users":
- content.createHeadline("{{.mainMenu.item.users}}");
- // Benutzername
- var dbKey = "username";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.users.username.placeholder}}");
- content.appendRow("{{.users.username.title}}", input);
- // Neues Passwort
- var dbKey = "password";
- var input = content.createInput("password", dbKey, "");
- input.setAttribute("placeholder", "{{.users.password.placeholder}}");
- content.appendRow("{{.users.password.title}}", input);
- // Bestätigung
- var dbKey = "confirm";
- var input = content.createInput("password", dbKey, "");
- input.setAttribute("placeholder", "{{.users.confirm.placeholder}}");
- content.appendRow("{{.users.confirm.title}}", input);
- // Berechtigung WEB
- var dbKey = "authentication.web";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- if (data["defaultUser"] == true) {
- input.setAttribute("onclick", "javascript: return false");
- }
- content.appendRow("{{.users.web.title}}", input);
- // Berechtigung PMS
- var dbKey = "authentication.pms";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- content.appendRow("{{.users.pms.title}}", input);
- // Berechtigung M3U
- var dbKey = "authentication.m3u";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- content.appendRow("{{.users.m3u.title}}", input);
- // Berechtigung XML
- var dbKey = "authentication.xml";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- content.appendRow("{{.users.xml.title}}", input);
- // Berechtigung API
- var dbKey = "authentication.api";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- content.appendRow("{{.users.api.title}}", input);
- // Interaktion
- content.createInteraction();
- // Löschen
- if (data["defaultUser"] != true && id != "-") {
- var input = content.createInput("button", "delete", "{{.button.delete}}");
- input.className = "delete";
- input.setAttribute('onclick', 'javascript: savePopupData("' + dataType + '", "' + id + '", true, 0)');
- content.addInteraction(input);
- }
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Speichern
- var input = content.createInput("button", "save", "{{.button.save}}");
- input.setAttribute("onclick", 'javascript: savePopupData("' + dataType + '", "' + id + '", "false");');
- content.addInteraction(input);
- break;
- case "mapping":
- content.createHeadline("{{.mainMenu.item.mapping}}");
- if (BULK_EDIT == true) {
- var dbKey = "x-channels-start";
- var input = content.createInput("text", dbKey, data[dbKey]);
- // Set the value to the first selected channel
- var channels = getAllSelectedChannels();
- var channel = SERVER["xepg"]["epgMapping"][channels[0]];
- if (typeof channel !== "undefined") {
- input.setAttribute("value", channel["x-channelID"]);
- }
- input.setAttribute("onchange", 'javascript: changeChannelNumbers("' + channels + '");');
- content.appendRow("{{.mapping.channelGroupStart.title}}", input);
- }
- // Aktiv
- var dbKey = "x-active";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- input.id = "active";
- //input.setAttribute("onchange", "javascript: this.className = 'changed'")
- input.setAttribute("onchange", "javascript: toggleChannelStatus('" + id + "', this)");
- content.appendRow("{{.mapping.active.title}}", input);
- // Kanalname
- var dbKey = "x-name";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- if (BULK_EDIT == true) {
- input.style.border = "solid 1px red";
- input.setAttribute("readonly", "true");
- }
- content.appendRow("{{.mapping.channelName.title}}", input);
- content.description(data["name"]);
- // Beschreibung
- var dbKey = "x-description";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("placeholder", "{{.mapping.description.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- content.appendRow("{{.mapping.description.title}}", input);
- // Aktualisierung des Kanalnamens
- if (data.hasOwnProperty("_uuid.key")) {
- if (data["_uuid.key"] != "") {
- var dbKey = "x-update-channel-name";
- var input = content.createCheckbox(dbKey);
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- input.checked = data[dbKey];
- content.appendRow("{{.mapping.updateChannelName.title}}", input);
- }
- }
- // Logo URL (Kanal)
- var dbKey = "tvg-logo";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- input.setAttribute("id", "channel-icon");
- content.appendRow("{{.mapping.channelLogo.title}}", input);
- // Aktualisierung des Kanallogos
- var dbKey = "x-update-channel-icon";
- var input = content.createCheckbox(dbKey);
- input.checked = data[dbKey];
- input.setAttribute("id", "update-icon");
- input.setAttribute("onchange", "javascript: this.className = 'changed'; changeChannelLogo('" + id + "');");
- content.appendRow("{{.mapping.updateChannelLogo.title}}", input);
- // Erweitern der EPG Kategorie
- var dbKey = "x-category";
- var text = ["-"];
- var values = [""];
- var epgCategories = SERVER["settings"]["epgCategories"];
- var categories = epgCategories.split("|");
- for (i = 0; i <= categories.length; i++) {
- var cat = categories[i];
- if (cat) {
- var cat_split = cat.split(":");
- text.push(cat_split[0]);
- values.push(cat_split[1]);
- }
- }
- var select = content.createSelect(text, values, data[dbKey], dbKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- content.appendRow("{{.mapping.epgCategory.title}}", select);
- // M3U Gruppentitel
- var dbKey = "x-group-title";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- content.appendRow("{{.mapping.m3uGroupTitle.title}}", input);
- if (data["group-title"] != undefined) {
- content.description(data["group-title"]);
- }
- // XMLTV Datei
- var dbKey = "x-xmltv-file";
- var xmlFile = data[dbKey];
- var xmltv = new XMLTVFile();
- var select = xmltv.getFiles(data[dbKey]);
- select.setAttribute("name", dbKey);
- select.setAttribute("id", "popup-xmltv");
- select.setAttribute("onchange", "javascript: this.className = 'changed'; setXmltvChannel('" + id + "',this, '" + data["x-mapping"] + "');");
- content.appendRow("{{.mapping.xmltvFile.title}}", select);
- var file = data[dbKey];
- // XMLTV Mapping
- var dbKey = "x-mapping";
- var xmltv = new XMLTVFile();
- const currentXmlTvId = data[dbKey];
- const [xmlTvIdContainer, xmlTvIdInput, xmlTvIdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, currentXmlTvId);
- xmlTvIdContainer.setAttribute('id', 'xmltv-id-picker-container');
- xmlTvIdInput.setAttribute('list', 'xmltv-id-picker-datalist');
- xmlTvIdInput.setAttribute('name', 'x-mapping'); // Should stay x-mapping as it will be used in donePopupData to make a server request
- xmlTvIdInput.setAttribute('id', 'xmltv-id-picker-input');
- xmlTvIdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`);
- xmlTvIdDatalist.setAttribute('id', 'xmltv-id-picker-datalist');
- // sortSelect(xmlTvIdDatalist); // TODO: Better sort before adding
- content.appendRow('{{.mapping.xmltvChannel.title}}', xmlTvIdContainer);
- // Extra PPV Data
- if (currentXmlTvId == "PPV") {
- var dbKey = "x-ppv-extra";
- var input = content.createInput("text", dbKey, data[dbKey]);
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- input.setAttribute("id", "ppv-extra");
- content.appendRow("{{.mapping.ppvextra.title}}", input);
- }
- var dbKey = "x-backup-channel-1";
- var xmltv = new XMLTVFile();
- const backup1XmlTvId = data[dbKey];
- const [xmlTvBackup1IdContainer, xmlTvBackup1IdInput, xmlTvBackup1IdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, backup1XmlTvId);
- xmlTvBackup1IdContainer.setAttribute('id', 'xmltv-id-picker-container-1');
- xmlTvBackup1IdInput.setAttribute('list', 'xmltv-id-picker-datalist');
- xmlTvBackup1IdInput.setAttribute('name', dbKey); // Should stay x-mapping as it will be used in donePopupData to make a server request
- xmlTvBackup1IdInput.setAttribute("id", "backup-channel-1");
- xmlTvBackup1IdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`);
- xmlTvBackup1IdDatalist.setAttribute('id', 'xmltv-id-picker-datalist-backup1');
- // sortSelect(xmlTvIdDatalist); // TODO: Better sort before adding
- content.appendRow('{{.mapping.backupChannel1.title}}', xmlTvBackup1IdContainer);
- var dbKey = "x-backup-channel-2";
- var xmltv = new XMLTVFile();
- const backup2XmlTvId = data[dbKey];
- const [xmlTvBackup2IdContainer, xmlTvBackup2IdInput, xmlTvBackup2IdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, backup2XmlTvId);
- xmlTvBackup2IdContainer.setAttribute('id', 'xmltv-id-picker-container-2');
- xmlTvBackup2IdInput.setAttribute('list', 'xmltv-id-picker-datalist');
- xmlTvBackup2IdInput.setAttribute('name', dbKey); // Should stay x-mapping as it will be used in donePopupData to make a server request
- xmlTvBackup2IdInput.setAttribute("id", "backup-channel-2");
- xmlTvBackup2IdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`);
- xmlTvBackup2IdDatalist.setAttribute('id', 'xmltv-id-picker-datalist-backup2');
- content.appendRow("{{.mapping.backupChannel2.title}}", xmlTvBackup2IdContainer);
- var dbKey = "x-backup-channel-3";
- var xmltv = new XMLTVFile();
- const backup3XmlTvId = data[dbKey];
- const [xmlTvBackup3IdContainer, xmlTvBackup3IdInput, xmlTvBackup3IdDatalist] = xmltv.newXmlTvIdPicker(xmlFile, backup3XmlTvId);
- xmlTvBackup3IdContainer.setAttribute('id', 'xmltv-id-picker-container-3');
- xmlTvBackup3IdInput.setAttribute('list', 'xmltv-id-picker-datalist');
- xmlTvBackup3IdInput.setAttribute('name', dbKey); // Should stay x-mapping as it will be used in donePopupData to make a server request
- xmlTvBackup3IdInput.setAttribute("id", "backup-channel-3");
- xmlTvBackup3IdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${id}', this, '${xmlFile}');`);
- xmlTvBackup3IdDatalist.setAttribute('id', 'xmltv-id-picker-datalist-backup3');
- content.appendRow("{{.mapping.backupChannel3.title}}", xmlTvBackup3IdContainer);
- // Interaktion
- content.createInteraction();
- // Logo hochladen
- var input = content.createInput("button", "cancel", "{{.button.uploadLogo}}");
- input.setAttribute("onclick", 'javascript: uploadLogo();');
- content.addInteraction(input);
- // Abbrechen
- var input = content.createInput("button", "cancel", "{{.button.cancel}}");
- input.setAttribute("onclick", 'javascript: showElement("popup", false);');
- content.addInteraction(input);
- // Fertig
- var ids = new Array();
- ids = getAllSelectedChannels();
- if (ids.length == 0) {
- ids.push(id);
- }
- var input = content.createInput("button", "save", "{{.button.done}}");
- input.setAttribute("onclick", 'javascript: donePopupData("' + dataType + '", "' + ids + '", "false");');
- content.addInteraction(input);
- break;
- default:
- break;
- }
- showPopUpElement('popup-custom');
-}
-class XMLTVFile {
- getFiles(set) {
- var fileIDs = getObjKeys(SERVER["xepg"]["xmltvMap"]);
- var values = new Array("-");
- var text = new Array("-");
- for (let i = 0; i < fileIDs.length; i++) {
- if (fileIDs[i] != "Threadfin Dummy") {
- values.push(getValueFromProviderFile(fileIDs[i], "xmltv", "file.threadfin"));
- text.push(getValueFromProviderFile(fileIDs[i], "xmltv", "name"));
- }
- else {
- values.push(fileIDs[i]);
- text.push(fileIDs[i]);
- }
- }
- var select = document.createElement("SELECT");
- for (let i = 0; i < text.length; i++) {
- var option = document.createElement("OPTION");
- option.setAttribute("value", values[i]);
- option.innerText = text[i];
- select.appendChild(option);
- }
- if (set != "") {
- select.value = set;
- }
- return select;
- }
- /**
- * @param xmlTvFile XML file path to get EPG from.
- * @param currentXmlTvId Current XMLTV ID to set initial input value to.
- * @returns Array of, sequentially:
- * 1) Container of the picker.
- * 2) Input field to type at and get choice from.
- * 3) Datalist containing every option.
- */
- newXmlTvIdPicker(xmlTvFile, currentXmlTvId) {
- const container = document.createElement('div');
- const input = document.createElement('input');
- input.setAttribute('type', 'text');
- // Initially, set value to '-' if input is empty
- input.value = (currentXmlTvId) ? currentXmlTvId : '-';
- // When input is focused, remove '-' from it
- input.addEventListener('focus', (evt) => {
- const target = evt.target;
- target.value = (target.value === '-') ? '' : target.value;
- });
- // When input lose focus or take a value, if it's empty, set value to '-'
- input.addEventListener('blur', setFallbackValue);
- input.addEventListener('change', setFallbackValue);
- function setFallbackValue(evt) {
- const target = evt.target;
- target.value = (target.value) ? target.value : '-';
- }
- container.appendChild(input);
- const datalist = document.createElement('datalist');
- const option = document.createElement('option');
- option.setAttribute('value', '-');
- option.innerText = '-';
- datalist.appendChild(option);
- const epg = SERVER['xepg']['xmltvMap'][xmlTvFile];
- if (epg) {
- const programIds = getOwnObjProps(epg);
- programIds.forEach((programId) => {
- const program = epg[programId];
- if (program.hasOwnProperty('display-name')) {
- const option = document.createElement('option');
- option.setAttribute('value', programId);
- option.innerText = program["display-name"];
- datalist.appendChild(option);
- }
- else {
- const option = document.createElement('option');
- option.setAttribute('value', programId);
- option.innerText = '-';
- datalist.appendChild(option);
- }
- });
- }
- container.appendChild(datalist);
- return [container, input, datalist];
- }
- getPrograms(file, set, active) {
- //var fileIDs:string[] = getObjKeys(SERVER["xepg"]["xmltvMap"])
- var values = getObjKeys(SERVER["xepg"]["xmltvMap"][file]);
- var text = new Array();
- var displayName;
- var actives = getObjKeys(SERVER["data"]["StreamPreviewUI"]["activeStreams"]);
- var active_list = new Array();
- if (active == true) {
- for (let i = 0; i < actives.length; i++) {
- var names_split = SERVER["data"]["StreamPreviewUI"]["activeStreams"][actives[i]].split("[");
- displayName = names_split[0].trim();
- if (displayName != "") {
- var object = { "value": displayName, "display": displayName };
- active_list.push(object);
- }
- }
- }
- else {
- for (let i = 0; i < values.length; i++) {
- if (SERVER["xepg"]["xmltvMap"][file][values[i]].hasOwnProperty('display-name') == true) {
- displayName = SERVER["xepg"]["xmltvMap"][file][values[i]]["display-name"];
- }
- else {
- displayName = "-";
- }
- text[i] = displayName + " (" + values[i] + ")";
- }
- }
- text.unshift("-");
- values.unshift("-");
- var select = document.createElement("SELECT");
- for (let i = 0; i < text.length; i++) {
- var option = document.createElement("OPTION");
- option.setAttribute("value", values[i]);
- option.innerText = text[i];
- select.appendChild(option);
- }
- for (let i = 0; i < active_list.length; i++) {
- var option = document.createElement("OPTION");
- option.setAttribute("value", active_list[i]["value"]);
- option.innerText = active_list[i]["display"];
- select.appendChild(option);
- }
- if (set != "") {
- select.value = set;
- }
- if (select.value != set) {
- select.value = "-";
- }
- return select;
- }
-}
-function getValueFromProviderFile(file, fileType, key) {
- if (file == "Threadfin Dummy") {
- return file;
- }
- var fileID;
- var indicator = file.charAt(0);
- switch (indicator) {
- case "M":
- fileType = "m3u";
- fileID = file;
- break;
- case "H":
- fileType = "hdhr";
- fileID = file;
- break;
- case "X":
- fileType = "xmltv";
- fileID = file.substring(0, file.lastIndexOf('.'));
- break;
- }
- if (SERVER["settings"]["files"][fileType].hasOwnProperty(fileID) == true) {
- var data = SERVER["settings"]["files"][fileType][fileID];
- return data[key];
- }
- return;
-}
-function setXmltvChannel(epgMapId, xmlTvFileSelect) {
- const xmlTv = new XMLTVFile();
- const newXmlTvFile = xmlTvFileSelect.value;
- // Remove old XMLTV ID selection box
- const xmlTvIdPickerParent = document.getElementById('xmltv-id-picker-container').parentElement;
- xmlTvIdPickerParent.innerHTML = '';
- // Create new XMLTV ID selection box
- const tvgId = SERVER['xepg']['epgMapping'][epgMapId]['tvg-id'];
- const [xmlTvIdContainer, xmlTvIdInput, xmlTvIdDatalist] = xmlTv.newXmlTvIdPicker(newXmlTvFile, tvgId);
- xmlTvIdContainer.setAttribute('id', 'xmltv-id-picker-container');
- xmlTvIdInput.setAttribute('list', 'xmltv-id-picker-datalist');
- xmlTvIdInput.setAttribute('name', 'x-mapping'); // Should stay x-mapping as it will be used in donePopupData to make a server request
- xmlTvIdInput.setAttribute('id', 'xmltv-id-picker-input');
- xmlTvIdInput.setAttribute('onchange', `javascript: this.className = 'changed'; checkXmltvChannel('${epgMapId}', this.value, '${newXmlTvFile}');`);
- xmlTvIdInput.classList.add('changed');
- xmlTvIdDatalist.setAttribute('id', 'xmltv-id-picker-datalist');
- // Add new XMLTV ID selection box to it's parent
- xmlTvIdPickerParent.appendChild(xmlTvIdContainer);
- checkXmltvChannel(epgMapId, xmlTvIdInput.value, newXmlTvFile);
-}
-function checkPPV(title, element) {
- var value = element.value;
- console.log("DUMMY TYPE: " + value);
- if (value == "PPV") {
- var td = document.getElementById("x-ppv-extra").parentElement;
- td.innerHTML = "";
- var dbKey = "x-ppv-extra";
- var input = document.createElement("INPUT");
- input.setAttribute("type", "text");
- input.setAttribute("name", dbKey);
- // input.setAttribute("value", value)
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- input.setAttribute("id", "ppv-extra");
- var tr = document.createElement("TR");
- // Bezeichnung
- if (title.length != 0) {
- var td = document.createElement("TD");
- td.className = "left";
- td.innerHTML = title + ":";
- }
- // Content
- td.appendChild(element);
- this.table.appendChild(tr);
- }
-}
-function checkXmltvChannel(id, element, xmlFile) {
- var value = element.value;
- var bool;
- var checkbox = document.getElementById('active');
- var channel = SERVER["xepg"]["epgMapping"][id];
- var updateLogo;
- if (value == "-") {
- bool = false;
- }
- else {
- bool = true;
- }
- checkbox.checked = bool;
- checkbox.className = "changed";
- console.log(xmlFile);
- // Kanallogo aktualisieren
- /*
- updateLogo = (document.getElementById("update-icon") as HTMLInputElement).checked
- console.log(updateLogo);
- */
- if (xmlFile != "Threadfin Dummy" && bool == true) {
- //(document.getElementById("update-icon") as HTMLInputElement).checked = true;
- //(document.getElementById("update-icon") as HTMLInputElement).className = "changed";
- console.log("ID", id);
- changeChannelLogo(id);
- return;
- }
- if (xmlFile == "Threadfin Dummy") {
- document.getElementById("update-icon").checked = false;
- document.getElementById("update-icon").className = "changed";
- }
- return;
-}
-function changeChannelLogo(epgMapId) {
- const channel = SERVER['xepg']['epgMapping'][epgMapId];
- const xmlTvFileSelect = document.getElementById('popup-xmltv');
- const xmlTvFile = xmlTvFileSelect.options[xmlTvFileSelect.selectedIndex].value;
- const xmlTvIdInput = document.getElementById('xmltv-id-picker-input');
- const newXmlTvId = xmlTvIdInput.value;
- const updateLogo = !BULK_EDIT || document.getElementById('update-icon').checked;
- let logo;
- if (updateLogo == true && xmlTvFile != 'Threadfin Dummy') {
- if (SERVER['xepg']['xmltvMap'][xmlTvFile].hasOwnProperty(newXmlTvId)) {
- logo = SERVER['xepg']['xmltvMap'][xmlTvFile][newXmlTvId]['icon'];
- }
- else {
- logo = channel['tvg-logo'];
- }
- }
-}
-function savePopupData(dataType, id, remove, option) {
- showElement("loading", true);
- if (dataType == "mapping") {
- var data = new Object();
- console.log("Save mapping data");
- cmd = "saveEpgMapping";
- data["epgMapping"] = SERVER["xepg"]["epgMapping"];
- console.log("SEND TO SERVER");
- var server = new Server(cmd);
- server.request(data);
- delete UNDO["epgMapping"];
- showElement("loading", false);
- return;
- }
- console.log("Save popup data");
- var div = document.getElementById("popup-custom");
- var inputs = div.getElementsByTagName("TABLE")[0].getElementsByTagName("INPUT");
- var selects = div.getElementsByTagName("TABLE")[0].getElementsByTagName("SELECT");
- var input = new Object();
- var confirmMsg;
- for (let i = 0; i < selects.length; i++) {
- var name;
- name = selects[i].name;
- var value = selects[i].value;
- switch (name) {
- case "tuner":
- input[name] = parseInt(value);
- break;
- default:
- input[name] = value;
- break;
- }
- }
- for (let i = 0; i < inputs.length; i++) {
- switch (inputs[i].type) {
- case "checkbox":
- name = inputs[i].name;
- input[name] = inputs[i].checked;
- break;
- case "text":
- case "hidden":
- case "password":
- name = inputs[i].name;
- switch (name) {
- case "tuner":
- input[name] = parseInt(inputs[i].value);
- break;
- default:
- input[name] = inputs[i].value;
- break;
- }
- break;
- }
- }
- var data = new Object();
- var cmd;
- if (remove == true) {
- input["delete"] = true;
- }
- switch (dataType) {
- case "users":
- confirmMsg = "Delete this user?";
- if (id == "-") {
- cmd = "saveNewUser";
- data["userData"] = input;
- }
- else {
- cmd = "saveUserData";
- var d = new Object();
- d[id] = input;
- data["userData"] = d;
- }
- break;
- case "m3u":
- confirmMsg = "Delete this playlist?";
- switch (option) {
- // Popup: Save
- case 0:
- cmd = "saveFilesM3U";
- break;
- // Popup: Update
- case 1:
- cmd = "updateFileM3U";
- break;
- }
- data["files"] = new Object;
- data["files"][dataType] = new Object;
- data["files"][dataType][id] = input;
- break;
- case "hdhr":
- confirmMsg = "Delete this HDHomeRun tuner?";
- switch (option) {
- // Popup: Save
- case 0:
- cmd = "saveFilesHDHR";
- break;
- // Popup: Update
- case 1:
- cmd = "updateFileHDHR";
- break;
- }
- data["files"] = new Object;
- data["files"][dataType] = new Object;
- data["files"][dataType][id] = input;
- break;
- case "xmltv":
- confirmMsg = "Delete this XMLTV file?";
- switch (option) {
- // Popup: Save
- case 0:
- cmd = "saveFilesXMLTV";
- break;
- // Popup: Update
- case 1:
- cmd = "updateFileXMLTV";
- break;
- }
- data["files"] = new Object;
- data["files"][dataType] = new Object;
- data["files"][dataType][id] = input;
- break;
- case "filter":
- confirmMsg = "Delete this filter?";
- cmd = "saveFilter";
- data["filter"] = new Object;
- data["filter"][id] = input;
- break;
- default:
- console.log(dataType, id);
- return;
- break;
- }
- if (remove == true) {
- if (!confirm(confirmMsg)) {
- showElement("popup", false);
- return;
- }
- }
- console.log("SEND TO SERVER");
- console.log(data);
- var server = new Server(cmd);
- server.request(data);
- showElement("loading", false);
-}
-function donePopupData(dataType, idsStr) {
- var ids = idsStr.split(',');
- var div = document.getElementById("popup-custom");
- var inputs = div.getElementsByClassName("changed");
- ids.forEach(id => {
- var input = new Object();
- input = SERVER["xepg"]["epgMapping"][id];
- console.log("INPUT: " + input);
- for (let i = 0; i < inputs.length; i++) {
- var name;
- var value;
- switch (inputs[i].tagName) {
- case "INPUT":
- switch (inputs[i].type) {
- case "checkbox":
- name = inputs[i].name;
- value = inputs[i].checked;
- input[name] = value;
- break;
- case "text":
- name = inputs[i].name;
- value = inputs[i].value;
- input[name] = value;
- break;
- }
- break;
- case "SELECT":
- name = inputs[i].name;
- value = inputs[i].value;
- input[name] = value;
- break;
- }
- switch (name) {
- case "tvg-logo":
- //(document.getElementById(id).childNodes[2].firstChild as HTMLElement).setAttribute("src", value)
- break;
- case "x-channel-start":
- document.getElementById(id).childNodes[3].firstChild.innerHTML = value;
- break;
- case "x-name":
- document.getElementById(id).childNodes[3].firstChild.innerHTML = value;
- break;
- case "x-category":
- var color = "white";
- var catColorSettings = SERVER["settings"]["epgCategoriesColors"];
- var colors_split = catColorSettings.split("|");
- for (var ii = 0; ii < colors_split.length; ii++) {
- var catsColor_split = colors_split[ii].split(":");
- if (catsColor_split[0] == value) {
- color = catsColor_split[1];
- }
- }
- document.getElementById(id).childNodes[3].firstChild.style.borderColor = color;
- break;
- case "x-group-title":
- document.getElementById(id).childNodes[5].firstChild.innerHTML = value;
- break;
- case "x-xmltv-file":
- if (value != "Threadfin Dummy" && value != "-") {
- value = getValueFromProviderFile(value, "xmltv", "name");
- }
- if (value == "-") {
- input["x-active"] = false;
- }
- document.getElementById(id).childNodes[6].firstChild.innerHTML = value;
- break;
- case "x-mapping":
- if (value == "-") {
- input["x-active"] = false;
- }
- document.getElementById(id).childNodes[7].firstChild.innerHTML = value;
- break;
- case "x-backup-channel":
- document.getElementById(id).childNodes[7].firstChild.innerHTML = value;
- break;
- case "x-hide-channel":
- document.getElementById(id).childNodes[7].firstChild.innerHTML = value;
- break;
- default:
- }
- createSearchObj();
- searchInMapping();
- }
- if (input["x-active"] == false) {
- document.getElementById(id).className = "notActiveEPG";
- }
- else {
- document.getElementById(id).className = "activeEPG";
- }
- console.log(input["tvg-logo"]);
- document.getElementById(id).childNodes[2].firstChild.setAttribute("src", input["tvg-logo"]);
- });
- showElement("popup", false);
- return;
-}
-function showPreview(element) {
- var div = document.getElementById("myStreamsBox");
- switch (element) {
- case false:
- div.className = "notVisible";
- return;
- break;
- }
- var streams = ["activeStreams", "inactiveStreams"];
- streams.forEach(preview => {
- var table = document.getElementById(preview);
- table.innerHTML = "";
- var obj = SERVER["data"]["StreamPreviewUI"][preview];
- var caption = document.createElement("CAPTION");
- var result = preview.replace(/([A-Z])/g, " $1");
- var finalResult = result.charAt(0).toUpperCase() + result.slice(1);
- caption.innerHTML = finalResult;
- table.appendChild(caption);
- var tbody = document.createElement("TBODY");
- table.appendChild(tbody);
- obj.slice(0, 1000).forEach(channel => {
- var tr = document.createElement("TR");
- var tdKey = document.createElement("TD");
- var tdVal = document.createElement("TD");
- tdKey.className = "tdKey";
- tdVal.className = "tdVal";
- switch (preview) {
- case "activeStreams":
- tdKey.innerText = "Channel: (+)";
- break;
- case "inactiveStreams":
- tdKey.innerText = "Channel: (-)";
- break;
- }
- tdVal.innerText = channel;
- tr.appendChild(tdKey);
- tr.appendChild(tdVal);
- tbody.appendChild(tr);
- table.appendChild(tr);
- });
- });
- // showElement("loading", false)
- div.className = "visible";
- return;
-}
-//# sourceMappingURL=menu_ts.js.map
\ No newline at end of file
diff --git a/html/js/network_ts.js b/html/js/network_ts.js
deleted file mode 100644
index 474c5a5..0000000
--- a/html/js/network_ts.js
+++ /dev/null
@@ -1,105 +0,0 @@
-class Server {
- constructor(cmd) {
- this.cmd = cmd;
- }
- request(data) {
- if (SERVER_CONNECTION == true) {
- return;
- }
- SERVER_CONNECTION = true;
- console.log(data);
- if (this.cmd != "updateLog") {
- // showElement("loading", true)
- UNDO = new Object();
- }
- switch (window.location.protocol) {
- case "http:":
- this.protocol = "ws://";
- break;
- case "https:":
- this.protocol = "wss://";
- break;
- }
- var url = this.protocol + window.location.hostname + ":" + window.location.port + "/data/" + "?Token=" + getCookie("Token");
- data["cmd"] = this.cmd;
- var ws = new WebSocket(url);
- ws.onopen = function () {
- WS_AVAILABLE = true;
- console.log("REQUEST (JS):");
- console.log(data);
- console.log("REQUEST: (JSON)");
- console.log(JSON.stringify(data));
- this.send(JSON.stringify(data));
- };
- ws.onerror = function (e) {
- console.log("No websocket connection to Threadfin could be established. Check your network configuration.");
- SERVER_CONNECTION = false;
- if (WS_AVAILABLE == false) {
- alert("No websocket connection to Threadfin could be established. Check your network configuration.");
- }
- };
- ws.onmessage = function (e) {
- SERVER_CONNECTION = false;
- showElement("loading", false);
- console.log("RESPONSE:");
- var response = JSON.parse(e.data);
- console.log(response);
- if (response.hasOwnProperty("token")) {
- document.cookie = "Token=" + response["token"];
- }
- if (response["status"] == false) {
- alert(response["err"]);
- if (response.hasOwnProperty("reload")) {
- location.reload();
- }
- return;
- }
- if (response.hasOwnProperty("logoURL")) {
- var div = document.getElementById("channel-icon");
- div.value = response["logoURL"];
- div.className = "changed";
- return;
- }
- switch (data["cmd"]) {
- case "updateLog":
- SERVER["log"] = response["log"];
- if (document.getElementById("content_log")) {
- showLogs(false);
- }
- return;
- break;
- default:
- SERVER = new Object();
- SERVER = response;
- break;
- }
- if (response.hasOwnProperty("openMenu")) {
- var menu = document.getElementById(response["openMenu"]);
- menu.click();
- showElement("popup", false);
- }
- if (response.hasOwnProperty("openLink")) {
- window.location = response["openLink"];
- }
- if (response.hasOwnProperty("alert")) {
- alert(response["alert"]);
- }
- if (response.hasOwnProperty("reload")) {
- location.reload();
- }
- if (response.hasOwnProperty("wizard")) {
- createLayout();
- configurationWizard[response["wizard"]].createWizard();
- return;
- }
- createLayout();
- };
- }
-}
-function getCookie(name) {
- var value = "; " + document.cookie;
- var parts = value.split("; " + name + "=");
- if (parts.length == 2)
- return parts.pop().split(";").shift();
-}
-//# sourceMappingURL=network_ts.js.map
\ No newline at end of file
diff --git a/html/js/settings_ts.js b/html/js/settings_ts.js
deleted file mode 100644
index 70b8235..0000000
--- a/html/js/settings_ts.js
+++ /dev/null
@@ -1,684 +0,0 @@
-class SettingsCategory {
- constructor() {
- this.DocumentID = "content_settings";
- }
- createCategoryHeadline(value) {
- var element = document.createElement("H4");
- element.innerHTML = value;
- return element;
- }
- createHR() {
- var element = document.createElement("HR");
- return element;
- }
- createSettings(settingsKey) {
- var setting = document.createElement("TR");
- var content = new PopupContent();
- var data = SERVER["settings"][settingsKey];
- switch (settingsKey) {
- // Texteingaben
- case "update":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.update.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "update", data.toString());
- input.setAttribute("placeholder", "{{.settings.update.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "backup.path":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.backupPath.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "backup.path", data);
- input.setAttribute("placeholder", "{{.settings.backupPath.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "temp.path":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.tempPath.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "temp.path", data);
- input.setAttribute("placeholder", "{{.settings.tmpPath.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "user.agent":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.userAgent.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "user.agent", data);
- input.setAttribute("placeholder", "{{.settings.userAgent.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "buffer.timeout":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.bufferTimeout.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "buffer.timeout", data);
- input.setAttribute("placeholder", "{{.settings.bufferTimeout.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "ffmpeg.path":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.ffmpegPath.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "ffmpeg.path", data);
- input.setAttribute("placeholder", "{{.settings.ffmpegPath.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "ffmpeg.options":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.ffmpegOptions.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "ffmpeg.options", data);
- input.setAttribute("placeholder", "{{.settings.ffmpegOptions.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "vlc.path":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.vlcPath.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "vlc.path", data);
- input.setAttribute("placeholder", "{{.settings.vlcPath.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "vlc.options":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.vlcOptions.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "vlc.options", data);
- input.setAttribute("placeholder", "{{.settings.vlcOptions.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "listeningIp":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.listeningIp.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "listeningIp", data);
- input.setAttribute("placeholder", "{{.settings.listeningIp.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- // Checkboxen
- case "authentication.web":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.authenticationWEB.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "authentication.pms":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.authenticationPMS.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "authentication.m3u":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.authenticationM3U.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "authentication.xml":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.authenticationXML.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "authentication.api":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.authenticationAPI.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "files.update":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.filesUpdate.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "cache.images":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.cacheImages.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "xepg.replace.missing.images":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.replaceEmptyImages.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "xepg.replace.channel.title":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.replaceChannelTitle.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "storeBufferInRAM":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.storeBufferInRAM.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "forceHttps":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.forceHttps.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "httpsPort":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.httpsPort.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "httpsPort", data.toString());
- input.setAttribute("placeholder", "{{.settings.httpsPort.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "httpsThreadfinDomain":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.httpsThreadfinDomain.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "httpsThreadfinDomain", data.toString());
- input.setAttribute("placeholder", "{{.settings.httpsThreadfinDomain.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "httpThreadfinDomain":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.httpThreadfinDomain.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "httpThreadfinDomain", data.toString());
- input.setAttribute("placeholder", "{{.settings.httpThreadfinDomain.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "enableNonAscii":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.enableNonAscii.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "epgCategories":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.epgCategories.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "epgCategories", data.toString());
- input.setAttribute("placeholder", "{{.settings.epgCategories.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "epgCategoriesColors":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.epgCategoriesColors.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "epgCategoriesColors", data.toString());
- input.setAttribute("placeholder", "{{.settings.epgCategoriesColors.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "ThreadfinAutoUpdate":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.ThreadfinAutoUpdate.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "ssdp":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.ssdp.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "dummy":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.dummy.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "dummyChannel":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.dummyChannel.title}}" + ":";
- var tdRight = document.createElement("TD");
- var text = ["PPV", "30 Minutes", "60 Minutes", "90 Minutes", "120 Minutes", "180 Minutes", "240 Minutes", "360 Minutes"];
- var values = ["PPV", "30_Minutes", "60_Minutes", "90_Minutes", "120_Minutes", "180_Minutes", "240_Minutes", "360_Minutes"];
- var select = content.createSelect(text, values, data, settingsKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(select);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "ignoreFilters":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.ignoreFilters.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "api":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.api.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createCheckbox(settingsKey);
- input.checked = data;
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- // Select
- case "tuner":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.tuner.title}}" + ":";
- var tdRight = document.createElement("TD");
- var text = new Array();
- var values = new Array();
- for (var i = 1; i <= 100; i++) {
- text.push(i);
- values.push(i);
- }
- var select = content.createSelect(text, values, data, settingsKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(select);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "epgSource":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.epgSource.title}}" + ":";
- var tdRight = document.createElement("TD");
- var text = ["PMS", "XEPG"];
- var values = ["PMS", "XEPG"];
- var select = content.createSelect(text, values, data, settingsKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(select);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "backup.keep":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.backupKeep.title}}" + ":";
- var tdRight = document.createElement("TD");
- var text = ["5", "10", "20", "30", "40", "50"];
- var values = ["5", "10", "20", "30", "40", "50"];
- var select = content.createSelect(text, values, data, settingsKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(select);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "buffer.size.kb":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.bufferSize.title}}" + ":";
- var tdRight = document.createElement("TD");
- var text = ["0.5 MB", "1 MB", "2 MB", "3 MB", "4 MB", "5 MB", "6 MB", "7 MB", "8 MB"];
- var values = ["512", "1024", "2048", "3072", "4096", "5120", "6144", "7168", "8192"];
- var select = content.createSelect(text, values, data, settingsKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(select);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "buffer":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.streamBuffering.title}}" + ":";
- var tdRight = document.createElement("TD");
- var text = ["{{.settings.streamBuffering.info_false}}", "FFmpeg: ({{.settings.streamBuffering.info_ffmpeg}})", "VLC: ({{.settings.streamBuffering.info_vlc}})"];
- var values = ["-", "ffmpeg", "vlc"];
- var select = content.createSelect(text, values, data, settingsKey);
- select.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(select);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- case "udpxy":
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "{{.settings.udpxy.title}}" + ":";
- var tdRight = document.createElement("TD");
- var input = content.createInput("text", "udpxy", data);
- input.setAttribute("placeholder", "{{.settings.udpxy.placeholder}}");
- input.setAttribute("onchange", "javascript: this.className = 'changed'");
- tdRight.appendChild(input);
- setting.appendChild(tdLeft);
- setting.appendChild(tdRight);
- break;
- }
- return setting;
- }
- createDescription(settingsKey) {
- var description = document.createElement("TR");
- var text;
- switch (settingsKey) {
- case "authentication.web":
- text = "{{.settings.authenticationWEB.description}}";
- break;
- case "authentication.m3u":
- text = "{{.settings.authenticationM3U.description}}";
- break;
- case "authentication.pms":
- text = "{{.settings.authenticationPMS.description}}";
- break;
- case "authentication.xml":
- text = "{{.settings.authenticationXML.description}}";
- break;
- case "authentication.api":
- if (SERVER["settings"]["authentication.web"] == true) {
- text = "{{.settings.authenticationAPI.description}}";
- }
- break;
- case "ThreadfinAutoUpdate":
- text = "{{.settings.ThreadfinAutoUpdate.description}}";
- break;
- case "listeningIp":
- text = "{{.settings.listeningIp.description}}";
- break;
- case "backup.keep":
- text = "{{.settings.backupKeep.description}}";
- break;
- case "backup.path":
- text = "{{.settings.backupPath.description}}";
- break;
- case "temp.path":
- text = "{{.settings.tempPath.description}}";
- break;
- case "buffer":
- text = "{{.settings.streamBuffering.description}}";
- break;
- case "buffer.size.kb":
- text = "{{.settings.bufferSize.description}}";
- break;
- case "storeBufferInRAM":
- text = "{{.settings.storeBufferInRAM.description}}";
- break;
- case "forceHttps":
- text = "{{.settings.forceHttps.description}}";
- break;
- case "httpsPort":
- text = "{{.settings.httpsPort.description}}";
- break;
- case "httpsThreadfinDomain":
- text = "{{.settings.httpsThreadfinDomain.description}}";
- break;
- case "httpThreadfinDomain":
- text = "{{.settings.httpThreadfinDomain.description}}";
- break;
- case "enableNonAscii":
- text = "{{.settings.enableNonAscii.description}}";
- break;
- case "epgCategories":
- text = "{{.settings.epgCategories.description}}";
- break;
- case "epgCategoriesColors":
- text = "{{.settings.epgCategoriesColors.description}}";
- break;
- case "buffer.timeout":
- text = "{{.settings.bufferTimeout.description}}";
- break;
- case "user.agent":
- text = "{{.settings.userAgent.description}}";
- break;
- case "ffmpeg.path":
- text = "{{.settings.ffmpegPath.description}}";
- break;
- case "ffmpeg.options":
- text = "{{.settings.ffmpegOptions.description}}";
- break;
- case "vlc.path":
- text = "{{.settings.vlcPath.description}}";
- break;
- case "vlc.options":
- text = "{{.settings.vlcOptions.description}}";
- break;
- case "epgSource":
- text = "{{.settings.epgSource.description}}";
- break;
- case "tuner":
- text = "{{.settings.tuner.description}}";
- break;
- case "update":
- text = "{{.settings.update.description}}";
- break;
- case "api":
- text = "{{.settings.api.description}}";
- break;
- case "ssdp":
- text = "{{.settings.ssdp.description}}";
- break;
- case "files.update":
- text = "{{.settings.filesUpdate.description}}";
- break;
- case "cache.images":
- text = "{{.settings.cacheImages.description}}";
- break;
- case "xepg.replace.missing.images":
- text = "{{.settings.replaceEmptyImages.description}}";
- break;
- case "xepg.replace.channel.title":
- text = "{{.settings.replaceChannelTitle.description}}";
- break;
- case "udpxy":
- text = "{{.settings.udpxy.description}}";
- break;
- default:
- text = "";
- break;
- }
- var tdLeft = document.createElement("TD");
- tdLeft.innerHTML = "";
- var tdRight = document.createElement("TD");
- var pre = document.createElement("PRE");
- pre.innerHTML = text;
- tdRight.appendChild(pre);
- description.appendChild(tdLeft);
- description.appendChild(tdRight);
- return description;
- }
-}
-class SettingsCategoryItem extends SettingsCategory {
- constructor(headline, settingsKeys) {
- super();
- this.headline = headline;
- this.settingsKeys = settingsKeys;
- }
- createCategory() {
- var headline = this.createCategoryHeadline(this.headline);
- var settingsKeys = this.settingsKeys;
- var doc = document.getElementById(this.DocumentID);
- doc.appendChild(headline);
- // Tabelle für die Kategorie erstellen
- var table = document.createElement("TABLE");
- var keys = settingsKeys.split(",");
- keys.forEach(settingsKey => {
- switch (settingsKey) {
- case "authentication.pms":
- case "authentication.m3u":
- case "authentication.xml":
- case "authentication.api":
- if (SERVER["settings"]["authentication.web"] == false) {
- break;
- }
- default:
- var item = this.createSettings(settingsKey);
- var description = this.createDescription(settingsKey);
- table.appendChild(item);
- table.appendChild(description);
- break;
- }
- });
- doc.appendChild(table);
- doc.appendChild(this.createHR());
- }
-}
-function showSettings() {
- console.log("SETTINGS");
- for (let i = 0; i < settingsCategory.length; i++) {
- settingsCategory[i].createCategory();
- }
-}
-function saveSettings() {
- console.log("Save Settings");
- var cmd = "saveSettings";
- var div = document.getElementById("content_settings");
- var settings = div.getElementsByClassName("changed");
- var newSettings = new Object();
- for (let i = 0; i < settings.length; i++) {
- var name;
- var value;
- switch (settings[i].tagName) {
- case "INPUT":
- switch (settings[i].type) {
- case "checkbox":
- name = settings[i].name;
- value = settings[i].checked;
- newSettings[name] = value;
- break;
- case "text":
- name = settings[i].name;
- value = settings[i].value;
- switch (name) {
- case "update":
- value = value.split(",");
- value = value.filter(function (e) { return e; });
- break;
- case "buffer.timeout":
- value = parseFloat(value);
- }
- newSettings[name] = value;
- break;
- }
- break;
- case "SELECT":
- name = settings[i].name;
- value = settings[i].value;
- // Wenn der Wert eine Zahl ist, wird dieser als Zahl gespeichert
- if (isNaN(value)) {
- newSettings[name] = value;
- }
- else {
- newSettings[name] = parseInt(value);
- }
- break;
- }
- }
- var data = new Object();
- data["settings"] = newSettings;
- var server = new Server(cmd);
- server.request(data);
-}
-//# sourceMappingURL=settings_ts.js.map
\ No newline at end of file
diff --git a/html/lang/en.json b/html/lang/en.json
index 2237455..76c1138 100644
--- a/html/lang/en.json
+++ b/html/lang/en.json
@@ -381,7 +381,7 @@
},
"cacheImages": {
"title": "Image Caching",
- "description": "All images from the XMLTV file are cached, allowing faster rendering of the grid in the client.
Downloading the images may take a while and will be done in the background."
+ "description": "This option will rewrite the m3u file to local image cache for tv logos.
All images from the XMLTV file are cached, allowing faster rendering of the grid in the client.
Downloading the images may take a while and will be done in the background.
"
},
"replaceEmptyImages": {
"title": "Replace missing program images",
@@ -436,6 +436,11 @@
"title": "Store buffer in RAM",
"description": "If checked, write buffer to RAM instead of writing to disk"
},
+ "omitPorts":
+ {
+ "title": "Omit port",
+ "description": "By activating this checkbox the m3u file will not contain the port in the url"
+ },
"listeningIp" :
{
"title": "Listening IPs",
@@ -443,23 +448,23 @@
},
"forceHttps":
{
- "title": "Force HTTPS",
- "description": "With image caching enabled, if checked, will rewrite M3U and EPG urls to include https protocol as well as https port (default is 443)"
+ "title": "Force HTTPS to Upstream server",
+ "description": "When this checkbox is activated Threadfin will be forced to use HTTPS connection to upstream server
This is not recommended as the given urls will be rewritten to https urls, this can lead to 404 HTTP Error Codes"
},
- "httpsPort":
+ "useHttps":
{
- "title": "HTTPS Port",
- "description": "With image caching enabled, port to use for forcing https. Default is 443"
+ "title": "Use HTTPS",
+ "description": "Enable HTTPS protocol for Threadfin, HTTPS Port needs to be set, otherwise the 443 will be used!"
},
- "httpsThreadfinDomain":
+ "forceClientHttps":
{
- "title": "HTTPS Threadfin Domain",
- "description": "With image caching enabled, rewrite the threadfin ip address in the m3u to use a domain for HTTPS mode. Do NOT include https (ex: somedomain.com)"
+ "title": "Force client to use https",
+ "description": "All URLs to this threadfin instance will be starting with https"
},
- "httpThreadfinDomain":
+ "threadfinDomain":
{
"title": "Threadfin Domain",
- "description": "With image caching enabled, rewrite the threadfin ip address in the m3u to use a domain for HTTP mode. Do NOT include http (ex: somedomain.com)"
+ "description": "When not empty, this will rewrite the URLs in the new m3u to a FQDN.
Do NOT include http (ex: somedomain.com)"
},
"enableNonAscii":
{
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..3a72baa
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,38 @@
+{
+ "name": "Threadfin",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "tsc": "^2.0.4"
+ },
+ "devDependencies": {
+ "typescript": "^5.5.2"
+ }
+ },
+ "node_modules/tsc": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/tsc/-/tsc-2.0.4.tgz",
+ "integrity": "sha512-fzoSieZI5KKJVBYGvwbVZs/J5za84f2lSTLPYf6AGiIf43tZ3GNrI1QzTLcjtyDDP4aLxd46RTZq1nQxe7+k5Q==",
+ "license": "MIT",
+ "bin": {
+ "tsc": "bin/tsc"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz",
+ "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..33846b5
--- /dev/null
+++ b/package.json
@@ -0,0 +1,8 @@
+{
+ "dependencies": {
+ "tsc": "^2.0.4"
+ },
+ "devDependencies": {
+ "typescript": "^5.5.2"
+ }
+}
diff --git a/src/config.go b/src/config.go
index c526dff..83f1302 100644
--- a/src/config.go
+++ b/src/config.go
@@ -48,11 +48,6 @@ func Init() (err error) {
System.AppName = strings.ToLower(System.Name)
System.ARCH = runtime.GOARCH
System.OS = runtime.GOOS
- System.ServerProtocol.API = "http"
- System.ServerProtocol.DVR = "http"
- System.ServerProtocol.M3U = "http"
- System.ServerProtocol.WEB = "http"
- System.ServerProtocol.XML = "http"
System.PlexChannelLimit = 480
System.UnfilteredChannelLimit = 480
System.Compatibility = "0.1.0"
@@ -200,14 +195,7 @@ func Init() (err error) {
showInfo(fmt.Sprintf("GitHub:https://github.com/%s", System.GitHub.User))
showInfo(fmt.Sprintf("Git Branch:%s [%s]", System.Branch, System.GitHub.User))
- // Domainnamen setzten
- if Settings.HttpThreadfinDomain != "" {
- setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port))
- } else {
- setGlobalDomain(fmt.Sprintf("%s:%s", System.IPAddress, Settings.Port))
- }
-
- System.URLBase = fmt.Sprintf("%s://%s:%s", System.ServerProtocol.WEB, System.IPAddress, Settings.Port)
+ System.URLBase = fmt.Sprintf("%s://%s:%s", System.ServerProtocol, System.IPAddress, Settings.Port)
// HTML Dateien erstellen, mit dev == true werden die lokalen HTML Dateien verwendet
if System.Dev {
diff --git a/src/data.go b/src/data.go
index a2d22cc..967ed84 100644
--- a/src/data.go
+++ b/src/data.go
@@ -12,7 +12,6 @@ import (
"time"
"threadfin/src/internal/authentication"
- "threadfin/src/internal/imgcache"
)
// Einstellungen ändern (WebUI)
@@ -23,6 +22,8 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e
var reloadData = false
var cacheImages = false
var createXEPGFiles = false
+ var omitPortsChanged = false
+ var serverProtocolChanged = false
var debug string
// -vvv [URL] --sout '#transcode{vcodec=mp4v, acodec=mpga} :standard{access=http, mux=ogg}'
@@ -113,9 +114,14 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e
}
- case "scheme.m3u", "scheme.xml":
+ case "scheme.m3u", "scheme.xml", "omitPorts", "forceClientHttps", "forceHttps", "threadfinDomain":
createXEPGFiles = true
-
+ if key == "omitPorts" {
+ omitPortsChanged = true
+ }
+ if key == "forceClientHttps" {
+ serverProtocolChanged = true
+ }
}
oldSettings[key] = value
@@ -146,7 +152,7 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e
// Einstellungen aktualisieren
err = json.Unmarshal([]byte(mapToJSON(oldSettings)), &Settings)
- if err != nil {
+ if err != nil {
return
}
@@ -187,6 +193,23 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e
}
+ if serverProtocolChanged || omitPortsChanged {
+ System.Domain = strings.Split(System.Domain, ":")[0]
+ if Settings.ForceClientHttps {
+ System.ServerProtocol = "https"
+ } else {
+ System.ServerProtocol = "http"
+ }
+ if Settings.ThreadfinDomain != "" {
+ System.Domain = Settings.ThreadfinDomain
+ }
+ if !Settings.OmitPorts {
+ System.Domain += ":" + System.Flag.Port
+ }
+ System.BaseURL = System.ServerProtocol + "://" + System.Domain
+ Data.Cache.Images.UpdateBaseURL(System.BaseURL)
+ }
+
err = saveSettings(Settings)
if err == nil {
@@ -207,27 +230,23 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e
if Settings.EpgSource == "XEPG" && System.ImageCachingInProgress == 0 {
- Data.Cache.Images, err = imgcache.New(System.Folder.ImagesCache, fmt.Sprintf("%s://%s/images/", System.ServerProtocol.WEB, System.Domain), Settings.CacheImages)
- if err != nil {
- ShowError(err, 0)
- }
-
switch Settings.CacheImages {
case false:
- createXMLTVFile()
- createM3UFile()
+ createXEPGFiles = true
case true:
go func() {
+ Data.Cache.Images.DeleteCache()
createXMLTVFile()
createM3UFile()
System.ImageCachingInProgress = 1
showInfo("Image Caching:Images are cached")
- Data.Cache.Images.Image.Caching()
+ //Data.Cache.Images.Image.Caching()
+ Data.Cache.Images.WaitForDownloads()
showInfo("Image Caching:Done")
System.ImageCachingInProgress = 0
@@ -245,6 +264,7 @@ func updateServerSettings(request RequestStruct) (settings SettingsStruct, err e
if createXEPGFiles {
go func() {
+ Data.Cache.Images.DeleteCache()
createXMLTVFile()
createM3UFile()
}()
@@ -509,13 +529,6 @@ func saveXEpgMapping(request RequestStruct) (err error) {
var tmp = Data.XEPG
- Data.Cache.StreamingURLS = make(map[string]StreamInfo)
-
- Data.Cache.Images, err = imgcache.New(System.Folder.ImagesCache, fmt.Sprintf("%s://%s/images/", System.ServerProtocol.WEB, System.Domain), Settings.CacheImages)
- if err != nil {
- ShowError(err, 0)
- }
-
err = json.Unmarshal([]byte(mapToJSON(request.EpgMapping)), &tmp)
if err != nil {
return
diff --git a/src/hdhr.go b/src/hdhr.go
index 9b5c6cc..2898ca1 100644
--- a/src/hdhr.go
+++ b/src/hdhr.go
@@ -42,7 +42,7 @@ func getCapability() (xmlContent []byte, err error) {
var buffer bytes.Buffer
capability.Xmlns = "urn:schemas-upnp-org:device-1-0"
- capability.URLBase = System.ServerProtocol.WEB + "://" + System.Domain
+ capability.URLBase = System.ServerProtocol + "://" + System.Domain
capability.SpecVersion.Major = 1
capability.SpecVersion.Minor = 0
@@ -71,14 +71,14 @@ func getDiscover() (jsonContent []byte, err error) {
var discover Discover
- discover.BaseURL = System.ServerProtocol.WEB + "://" + System.Domain
+ discover.BaseURL = System.BaseURL
discover.DeviceAuth = System.AppName
discover.DeviceID = System.DeviceID
discover.FirmwareName = "bin_" + System.Version
discover.FirmwareVersion = System.Version
discover.FriendlyName = System.Name
- discover.LineupURL = fmt.Sprintf("%s://%s/lineup.json", System.ServerProtocol.DVR, System.Domain)
+ discover.LineupURL = fmt.Sprintf("%s://%s/lineup.json", System.ServerProtocol, System.Domain)
discover.Manufacturer = "Golang"
discover.ModelNumber = System.Version
discover.TunerCount = Settings.Tuner
@@ -136,7 +136,7 @@ func getLineup() (jsonContent []byte, err error) {
}
- stream.URL, err = createStreamingURL("DVR", m3uChannel.FileM3UID, stream.GuideNumber, m3uChannel.Name, m3uChannel.URL, "", "", "")
+ stream.URL, err = createStreamingURL(m3uChannel.FileM3UID, stream.GuideNumber, m3uChannel.Name, m3uChannel.URL, "", "", "")
if err == nil {
lineup = append(lineup, stream)
} else {
@@ -159,7 +159,7 @@ func getLineup() (jsonContent []byte, err error) {
stream.GuideName = xepgChannel.XName
stream.GuideNumber = xepgChannel.XChannelID
//stream.URL = fmt.Sprintf("%s://%s/stream/%s-%s", System.ServerProtocol.DVR, System.Domain, xepgChannel.FileM3UID, base64.StdEncoding.EncodeToString([]byte(xepgChannel.URL)))
- stream.URL, err = createStreamingURL("DVR", xepgChannel.FileM3UID, xepgChannel.XChannelID, xepgChannel.XName, xepgChannel.URL, xepgChannel.BackupChannel1URL, xepgChannel.BackupChannel2URL, xepgChannel.BackupChannel3URL)
+ stream.URL, err = createStreamingURL(xepgChannel.FileM3UID, xepgChannel.XChannelID, xepgChannel.XName, xepgChannel.URL, xepgChannel.BackupChannel1URL, xepgChannel.BackupChannel2URL, xepgChannel.BackupChannel3URL)
if err == nil {
lineup = append(lineup, stream)
} else {
diff --git a/src/images.go b/src/images.go
index 04dd256..2a539d0 100644
--- a/src/images.go
+++ b/src/images.go
@@ -23,7 +23,7 @@ func uploadLogo(input, filename string) (logoURL string, err error) {
return
}
- logoURL = fmt.Sprintf("%s://%s/data_images/%s", System.ServerProtocol.XML, System.Domain, filename)
+ logoURL = fmt.Sprintf("%s://%s/data_images/%s", System.ServerProtocol, System.Domain, filename)
return
diff --git a/src/info.go b/src/info.go
index 4014474..3f2c322 100644
--- a/src/info.go
+++ b/src/info.go
@@ -20,14 +20,14 @@ func ShowSystemInfo() {
fmt.Println("OK")
println()
- fmt.Printf("Version: %s %s.%s\n", System.Name, System.Version, System.Build)
- fmt.Printf("Branch: %s\n", System.Branch)
- fmt.Printf("GitHub: %s/%s | Git update = %t\n", System.GitHub.User, System.GitHub.Repo, System.GitHub.Update)
- fmt.Printf("Folder (config): %s\n", System.Folder.Config)
+ fmt.Printf("Version: %s %s.%s\n", System.Name, System.Version, System.Build)
+ fmt.Printf("Branch: %s\n", System.Branch)
+ fmt.Printf("GitHub: %s/%s | Git update = %t\n", System.GitHub.User, System.GitHub.Repo, System.GitHub.Update)
+ fmt.Printf("Folder (config): %s\n", System.Folder.Config)
- fmt.Printf("Streams: %d / %d\n", len(Data.Streams.Active), len(Data.Streams.All))
- fmt.Printf("Filter: %d\n", len(Data.Filter))
- fmt.Printf("XEPG Chanels: %d\n", int(Data.XEPG.XEPGCount))
+ fmt.Printf("Streams: %d / %d\n", len(Data.Streams.Active), len(Data.Streams.All))
+ fmt.Printf("Filter: %d\n", len(Data.Filter))
+ fmt.Printf("XEPG Chanels: %d\n", int(Data.XEPG.XEPGCount))
println()
fmt.Printf("IPv4 Addresses:\n")
@@ -37,9 +37,9 @@ func ShowSystemInfo() {
switch count := i; {
case count < 10:
- fmt.Printf(" %d. %s\n", count, ipv4)
+ fmt.Printf(" %d. %s\n", count, ipv4)
case count < 100:
- fmt.Printf(" %d. %s\n", count, ipv4)
+ fmt.Printf(" %d. %s\n", count, ipv4)
}
}
@@ -52,9 +52,9 @@ func ShowSystemInfo() {
switch count := i; {
case count < 10:
- fmt.Printf(" %d. %s\n", count, ipv4)
+ fmt.Printf(" %d. %s\n", count, ipv4)
case count < 100:
- fmt.Printf(" %d. %s\n", count, ipv4)
+ fmt.Printf(" %d. %s\n", count, ipv4)
}
@@ -63,33 +63,44 @@ func ShowSystemInfo() {
println("---")
fmt.Println("Settings [General]")
- fmt.Printf("Threadfin Update: %t\n", Settings.ThreadfinAutoUpdate)
- fmt.Printf("UUID: %s\n", Settings.UUID)
- fmt.Printf("Tuner (Plex / Emby): %d\n", Settings.Tuner)
- fmt.Printf("EPG Source: %s\n", Settings.EpgSource)
+ fmt.Printf("Threadfin Update: %t\n", Settings.ThreadfinAutoUpdate)
+ fmt.Printf("UUID: %s\n", Settings.UUID)
+ fmt.Printf("Tuner (Plex / Emby): %d\n", Settings.Tuner)
+ fmt.Printf("EPG Source: %s\n", Settings.EpgSource)
+ fmt.Printf("Enable Defaul Dummy Data: %t\n", Settings.Dummy)
println("---")
fmt.Println("Settings [Files]")
- fmt.Printf("Schedule: %s\n", strings.Join(Settings.Update, ","))
- fmt.Printf("Files Update: %t\n", Settings.FilesUpdate)
- fmt.Printf("Folder (tmp): %s\n", Settings.TempPath)
- fmt.Printf("Image Chaching: %t\n", Settings.CacheImages)
- fmt.Printf("Replace EPG Image: %t\n", Settings.XepgReplaceMissingImages)
+ fmt.Printf("Schedule: %s\n", strings.Join(Settings.Update, ","))
+ fmt.Printf("Files Update: %t\n", Settings.FilesUpdate)
+ fmt.Printf("Folder (tmp): %s\n", Settings.TempPath)
+ fmt.Printf("Image Chaching: %t\n", Settings.CacheImages)
+ fmt.Printf("Omit port: %t\n", Settings.OmitPorts)
+ fmt.Printf("Replace EPG Image: %t\n", Settings.XepgReplaceMissingImages)
+ fmt.Printf("Replace PPV channels: %t\n", Settings.XepgReplaceChannelTitle)
+ fmt.Printf("Enable Non-ASCII: %t\n", Settings.EnableNonAscii)
+
+ println("---")
+
+ fmt.Println("Network")
+ fmt.Printf("Listening IPs: %s\n", Settings.ListeningIp)
+ fmt.Printf("Threadfin Domain: %s\n", Settings.ThreadfinDomain)
+ fmt.Printf("Use Https: %t\n", Settings.UseHttps)
+ fmt.Printf("Fort Https to upstream: %t\n", Settings.ForceHttpsToUpstream)
println("---")
fmt.Println("Settings [Streaming]")
- fmt.Printf("Buffer: %s\n", Settings.Buffer)
- fmt.Printf("UDPxy: %s\n", Settings.UDPxy)
- fmt.Printf("Buffer Size: %d KB\n", Settings.BufferSize)
- fmt.Printf("Timeout: %d ms\n", int(Settings.BufferTimeout))
- fmt.Printf("User Agent: %s\n", Settings.UserAgent)
+ fmt.Printf("Buffer: %s\n", Settings.Buffer)
+ fmt.Printf("UDPxy: %s\n", Settings.UDPxy)
+ fmt.Printf("Buffer Size: %d KB\n", Settings.BufferSize)
+ fmt.Printf("Timeout: %d ms\n", int(Settings.BufferTimeout))
+ fmt.Printf("User Agent: %s\n", Settings.UserAgent)
println("---")
fmt.Println("Settings [Backup]")
- fmt.Printf("Folder (backup): %s\n", Settings.BackupPath)
- fmt.Printf("Backup Keep: %d\n", Settings.BackupKeep)
-
+ fmt.Printf("Folder (backup): %s\n", Settings.BackupPath)
+ fmt.Printf("Backup Keep: %d\n", Settings.BackupKeep)
}
diff --git a/src/internal/imgcache/cache.go b/src/internal/imgcache/cache.go
deleted file mode 100644
index 435d5a5..0000000
--- a/src/internal/imgcache/cache.go
+++ /dev/null
@@ -1,180 +0,0 @@
-package imgcache
-
-import (
- "fmt"
- "io"
- "net/http"
- "net/url"
- "os"
- "path/filepath"
- "strings"
- "sync"
-)
-
-// Cache : Cache strcut
-type Cache struct {
- path string
- cacheURL string
- caching bool
- images map[string]string
- Queue []string
- Cache []string
- Image imageFunc
- sync.RWMutex
-}
-
-type imageFunc struct {
- GetURL func(string, string, string, bool, int, string) string
- Caching func()
- Remove func()
-}
-
-// New : New cahce
-func New(path, cacheURL string, caching bool) (c *Cache, err error) {
-
- c = &Cache{}
-
- c.images = make(map[string]string)
- c.path = path
- c.cacheURL = cacheURL
- c.caching = caching
- c.Queue = []string{}
- c.Cache = []string{}
-
- var queue []string
-
- c.Image.GetURL = func(src string, http_domain string, http_port string, force_https bool, https_port int, https_domain string) (cacheURL string) {
-
- c.Lock()
- defer c.Unlock()
-
- src = strings.Trim(src, "\r\n")
-
- if !c.caching {
- return src
- }
-
- u, err := url.Parse(src)
-
- if err != nil || len(filepath.Ext(u.Path)) == 0 {
- return src
- }
-
- src_filtered := strings.Split(src, "?")
- var filename = fmt.Sprintf("%s%s", strToMD5(src_filtered[0]), filepath.Ext(u.Path))
-
- if cacheURL, ok := c.images[filename]; ok {
- if c.caching && force_https {
- u, err := url.Parse(cacheURL)
- if err == nil {
- cacheURL = fmt.Sprintf("https://%s:%d%s", https_domain, https_port, u.Path)
- }
- } else if c.caching && http_domain != "" {
- u, err := url.Parse(cacheURL)
- if err == nil {
- cacheURL = fmt.Sprintf("http://%s:%s%s", http_domain, http_port, u.Path)
- }
- }
- return cacheURL
- }
-
- if indexOfString(filename, c.Cache) == -1 {
- if indexOfString(src, c.Queue) == -1 {
- c.Queue = append(c.Queue, src)
- }
-
- } else {
- c.images[filename] = c.cacheURL + filename
- src = c.cacheURL + filename
- }
-
- return src
- }
-
- c.Image.Caching = func() {
-
- c.Lock()
- defer c.Unlock()
-
- var filename string
-
- for _, src := range c.Queue {
-
- resp, err := http.Get(src)
- if err != nil {
- continue
- }
- defer resp.Body.Close()
-
- if resp.StatusCode != http.StatusOK {
- continue
- }
-
- src_filtered := strings.Split(src, "?")
- filename = fmt.Sprintf("%s%s%s", c.path, strToMD5(src_filtered[0]), filepath.Ext(src_filtered[0]))
-
- file, err := os.Create(filename)
- if err != nil {
- continue
- }
-
- defer file.Close()
-
- _, err = io.Copy(file, resp.Body)
- if err != nil {
- continue
- }
-
- u, err := url.Parse(src_filtered[0])
- if err == nil {
- c.images[fmt.Sprintf("%s%s", strToMD5(src_filtered[0]), filepath.Ext(u.Path))] = c.cacheURL + filename
- }
-
- queue = append(queue, src_filtered[0])
-
- }
-
- for _, q := range queue {
- c.Queue = removeStringFromSlice(q, c.Queue)
- }
-
- }
-
- c.Image.Remove = func() {
-
- c.Lock()
- defer c.Unlock()
-
- files, err := os.ReadDir(c.path)
- if err != nil {
- return
- }
-
- for _, file := range files {
-
- switch c.caching {
-
- case true:
- if _, ok := c.images[file.Name()]; !ok {
- os.RemoveAll(c.path + file.Name())
- }
-
- case false:
- os.RemoveAll(c.path + file.Name())
- }
-
- }
-
- }
-
- files, err := os.ReadDir(c.path)
- if err != nil {
- return
- }
-
- for _, file := range files {
- c.Cache = append(c.Cache, file.Name())
- }
-
- return
-}
diff --git a/src/internal/imgcache/imagecache.go b/src/internal/imgcache/imagecache.go
new file mode 100644
index 0000000..a1fd83d
--- /dev/null
+++ b/src/internal/imgcache/imagecache.go
@@ -0,0 +1,170 @@
+package imgcache
+
+import (
+ "bytes"
+ "errors"
+ "io"
+ "net/http"
+ "os"
+ "path/filepath"
+ "strings"
+ "sync"
+)
+
+type ImageCache struct {
+ cache map[string]string
+ caching bool
+ basePath string
+ baseURL string
+ httpPool *sync.Pool
+ mutex sync.Mutex
+ wg sync.WaitGroup
+}
+
+// Create a new image cache
+func NewImageCache(caching bool, basePath string, baseURL string) (*ImageCache) {
+ return &ImageCache{
+ caching: caching,
+ basePath: basePath,
+ baseURL: baseURL,
+ cache: make(map[string]string),
+ httpPool: &sync.Pool{
+ New: func() interface {} {
+ return &http.Client{}
+ },
+ },
+ }
+}
+
+func (ic *ImageCache) UpdateBaseURL(url string) {
+ ic.baseURL = url
+}
+
+// Enqueue the URL for downloading
+func (ic *ImageCache) EnqueueURL(url string, filename string) {
+ ic.wg.Add(1)
+ go func(url string) {
+ defer ic.wg.Done()
+ ic.DownloadImage(url, filename)
+ }(url)
+}
+
+// Get the Url to the Image cached or original
+func (ic *ImageCache) GetImageURL(url string) (string) {
+ // Generate the key from the URL
+ key := createKeyFromUrl(url)
+ // If image is already cached return the url
+ ic.mutex.Lock()
+ if cached_url, ok := ic.cache[key]; ok {
+ ic.mutex.Unlock()
+ return cached_url
+ }
+ ic.mutex.Unlock()
+
+ if ic.caching {
+ filename := createFileNameFromURL(url, key)
+ path_to_file := ic.basePath + filename
+ url_to_file := ic.baseURL + "/cache/" + filename
+
+ // Enqueue the Image for the download
+ ic.EnqueueURL(url, path_to_file)
+
+ // Save file name in cache
+ ic.mutex.Lock()
+ ic.cache[key] = url_to_file
+ ic.mutex.Unlock()
+ return url_to_file
+ } else {
+ // Save original url in cache
+ return url
+ }
+}
+
+// Faster creation of file names
+func createFileNameFromURL(url string, key string) (string) {
+ url_stripped := strings.Split(url, "?")[0]
+ ext := filepath.Ext(url_stripped)
+
+ var buf bytes.Buffer
+ buf.WriteString(key)
+ buf.WriteString(ext)
+
+ return buf.String()
+}
+
+// Download the Image
+func (ic *ImageCache) DownloadImage(url string, filename string) (error) {
+
+ // Check if file already exists
+ if _, err := os.Stat(filename); errors.Is(err, os.ErrNotExist) {
+ // Get a HTTP-Connection from the pool
+ client := ic.httpPool.Get().(*http.Client)
+ defer ic.httpPool.Put(client)
+
+ // Download the image
+ resp, err := client.Get(url)
+ if err != nil {
+ ic.ErrorHandlingWhenDownloading(url)
+ return errors.New("error when downloading the image")
+ }
+ defer resp.Body.Close()
+
+ if resp.StatusCode != http.StatusOK {
+ if resp.StatusCode == 404 {
+ url = "https://" + strings.Split(url, "//")[1]
+ resp, err = client.Get(url)
+ if err != nil {
+ ic.ErrorHandlingWhenDownloading(url)
+ return errors.New("error when downloading the image")
+ }
+ if resp.StatusCode != http.StatusOK {
+ ic.ErrorHandlingWhenDownloading(url)
+ return errors.New("received bad status code")
+ }
+ } else {
+ ic.ErrorHandlingWhenDownloading(url)
+ return errors.New("received bad status code")
+ }
+ }
+
+ // Save the image to disk
+ file, err := os.Create(filename)
+ if err != nil {
+ ic.ErrorHandlingWhenDownloading(url)
+ return errors.New("unable to create the file")
+ }
+ defer file.Close()
+
+ _, err = io.Copy(file, resp.Body)
+ if err != nil {
+ ic.ErrorHandlingWhenDownloading(url)
+ return errors.New("can't save the image to the file")
+ }
+ return nil
+ }
+ return nil
+}
+
+func (ic *ImageCache) ErrorHandlingWhenDownloading(url string) {
+ ic.mutex.Lock()
+ defer ic.mutex.Unlock()
+ ic.cache[url]=url
+}
+
+// Block until downloads have been completed
+func (ic *ImageCache) WaitForDownloads() {
+ ic.wg.Wait()
+}
+
+func (ic *ImageCache) GetNumCachedImages() int {
+ ic.mutex.Lock()
+ defer ic.mutex.Unlock()
+ return len(ic.cache)
+}
+
+// Clear the cache but not the files
+func (ic *ImageCache) DeleteCache() {
+ if ic.caching {
+ ic.cache = make(map[string]string) // Clear the cache
+ }
+}
diff --git a/src/internal/imgcache/tools.go b/src/internal/imgcache/tools.go
index 9d4b622..8b4bdc1 100644
--- a/src/internal/imgcache/tools.go
+++ b/src/internal/imgcache/tools.go
@@ -1,8 +1,9 @@
package imgcache
import (
- "crypto/md5"
- "encoding/hex"
+ "crypto/md5"
+ "encoding/hex"
+ "io"
)
func strToMD5(str string) string {
@@ -32,3 +33,11 @@ func removeStringFromSlice(str string, slice []string) []string {
return slice
}
+
+// createIndexFromUrl will calculate the URLs md5 and will pick then only the digits within the string too create a key
+func createKeyFromUrl(url string) (string) {
+ // Berechne den MD5-Hash der URL
+ hasher := md5.New()
+ io.WriteString(hasher, url)
+ return hex.EncodeToString(hasher.Sum(nil))
+}
diff --git a/src/m3u.go b/src/m3u.go
index 917ebd9..08ce0b4 100644
--- a/src/m3u.go
+++ b/src/m3u.go
@@ -3,7 +3,6 @@ package src
import (
"encoding/json"
"fmt"
- "net/url"
"path"
"regexp"
"sort"
@@ -182,7 +181,7 @@ func checkConditions(streamValues, conditions, coType string) (status bool) {
// Threadfin M3U Datei erstellen
func buildM3U(groups []string) (m3u string, err error) {
- var imgc = Data.Cache.Images
+ //var imgc = Data.Cache.Images
var m3uChannels = make(map[float64]XEPGChannelStruct)
var channelNumbers []float64
@@ -218,12 +217,8 @@ func buildM3U(groups []string) (m3u string, err error) {
// M3U Inhalt erstellen
sort.Float64s(channelNumbers)
-
- var xmltvURL = fmt.Sprintf("%s://%s/xmltv/threadfin.xml", System.ServerProtocol.XML, System.Domain)
- if Settings.ForceHttps && Settings.HttpsThreadfinDomain != "" {
- xmltvURL = fmt.Sprintf("https://%s/xmltv/threadfin.xml", Settings.HttpsThreadfinDomain)
- }
- m3u = fmt.Sprintf(`#EXTM3U url-tvg="%s" x-tvg-url="%s"`+"\n", xmltvURL, xmltvURL)
+
+ m3u = fmt.Sprintf(`#EXTM3U url-tvg="%s" x-tvg-url="%s"`+"\n", System.BaseURL, System.BaseURL)
for _, channelNumber := range channelNumbers {
@@ -234,24 +229,13 @@ func buildM3U(groups []string) (m3u string, err error) {
group = channel.XCategory
}
- if Settings.ForceHttps && Settings.HttpsThreadfinDomain != "" {
- u, err := url.Parse(channel.URL)
- if err == nil {
- u.Scheme = "https"
- host_split := strings.Split(u.Host, ":")
- if len(host_split) > 0 {
- u.Host = host_split[0]
- }
- channel.URL = fmt.Sprintf("https://%s:%d%s", u.Host, Settings.HttpsPort, u.Path)
- }
- }
-
logo := ""
if channel.TvgLogo != "" {
- logo = imgc.Image.GetURL(channel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ logo = Data.Cache.Images.GetImageURL(channel.TvgLogo)
}
var parameter = fmt.Sprintf(`#EXTINF:0 channelID="%s" tvg-chno="%s" tvg-name="%s" tvg-id="%s" tvg-logo="%s" group-title="%s",%s`+"\n", channel.XEPG, channel.XChannelID, channel.XName, channel.XChannelID, logo, group, channel.XName)
- var stream, err = createStreamingURL("M3U", channel.FileM3UID, channel.XChannelID, channel.XName, channel.URL, channel.BackupChannel1URL, channel.BackupChannel2URL, channel.BackupChannel3URL)
+ var stream = ""
+ stream, err = createStreamingURL(channel.FileM3UID, channel.XChannelID, channel.XName, channel.URL, channel.BackupChannel1URL, channel.BackupChannel2URL, channel.BackupChannel3URL)
if err == nil {
m3u = m3u + parameter + stream + "\n"
}
diff --git a/src/screen.go b/src/screen.go
index 4969208..96b3a5e 100644
--- a/src/screen.go
+++ b/src/screen.go
@@ -281,6 +281,10 @@ func getErrMsg(errCode int) (errMsg string) {
errMsg = "WebUI request error"
case 1102:
errMsg = "WebUI response error"
+ case 1110:
+ errMsg = "Could not read message from websocket"
+ case 1120:
+ errMsg = "Could not parse JSON from request"
// PMS Guide Numbers
case 1200:
diff --git a/src/struct-system.go b/src/struct-system.go
index 23826aa..aea172b 100644
--- a/src/struct-system.go
+++ b/src/struct-system.go
@@ -50,12 +50,13 @@ type SystemStruct struct {
}
Flag struct {
- Branch string
- Debug int
- Info bool
- Port string
- Restore string
- SSDP bool
+ Branch string
+ Debug int
+ Info bool
+ Port string
+ UseHttps bool
+ Restore string
+ SSDP bool
}
Folder struct {
@@ -68,6 +69,8 @@ type SystemStruct struct {
Temp string
}
+ BaseURL string
+ ServerProtocol string
Hostname string
ImageCachingInProgress int
IPAddress string
@@ -81,14 +84,6 @@ type SystemStruct struct {
Notification map[string]Notification
- ServerProtocol struct {
- API string
- DVR string
- M3U string
- WEB string
- XML string
- }
-
GitHub struct {
Branch string
Repo string
@@ -125,10 +120,7 @@ type GithubReleaseInfo struct {
// DataStruct : Alle Daten werden hier abgelegt. (Lineup, XMLTV)
type DataStruct struct {
Cache struct {
- Images *imgcache.Cache
- ImagesCache []string
- ImagesFiles []string
- ImagesURLS []string
+ Images *imgcache.ImageCache
PMS map[string]string
StreamingURLS map[string]StreamInfo
@@ -219,19 +211,19 @@ type XEPGChannelStruct struct {
// M3UChannelStructXEPG : M3U Struktur für XEPG
type M3UChannelStructXEPG struct {
- FileM3UID string `json:"_file.m3u.id,required"`
- FileM3UName string `json:"_file.m3u.name,required"`
- FileM3UPath string `json:"_file.m3u.path,required"`
- GroupTitle string `json:"group-title,required"`
- Name string `json:"name,required"`
- TvgID string `json:"tvg-id,required"`
- TvgLogo string `json:"tvg-logo,required"`
+ FileM3UID string `json:"_file.m3u.id"`
+ FileM3UName string `json:"_file.m3u.name"`
+ FileM3UPath string `json:"_file.m3u.path"`
+ GroupTitle string `json:"group-title"`
+ Name string `json:"name"`
+ TvgID string `json:"tvg-id"`
+ TvgLogo string `json:"tvg-logo"`
TvgChno string `json:"tvg-chno"`
- TvgName string `json:"tvg-name,required"`
- URL string `json:"url,required"`
- UUIDKey string `json:"_uuid.key,required"`
- UUIDValue string `json:"_uuid.value,required"`
- Values string `json:"_values,required"`
+ TvgName string `json:"tvg-name"`
+ URL string `json:"url"`
+ UUIDKey string `json:"_uuid.key"`
+ UUIDValue string `json:"_uuid.value"`
+ Values string `json:"_values"`
}
// FilterStruct : Filter Struktur
@@ -251,28 +243,28 @@ type FilterStruct struct {
// StreamingURLS : Informationen zu allen streaming URL's
type StreamingURLS struct {
- Streams map[string]StreamInfo `json:"channels,required"`
+ Streams map[string]StreamInfo `json:"channels"`
}
// StreamInfo : Informationen zum Kanal für die streaming URL
type StreamInfo struct {
- ChannelNumber string `json:"channelNumber,required"`
- Name string `json:"name,required"`
- PlaylistID string `json:"playlistID,required"`
- URL string `json:"url,required"`
- BackupChannel1URL string `json:"backup_channel_1_url,required"`
- BackupChannel2URL string `json:"backup_channel_2_url,required"`
- BackupChannel3URL string `json:"backup_channel_3_url,required"`
- URLid string `json:"urlID,required"`
+ ChannelNumber string `json:"channelNumber"`
+ Name string `json:"name"`
+ PlaylistID string `json:"playlistID"`
+ URL string `json:"url"`
+ BackupChannel1URL string `json:"backup_channel_1_url"`
+ BackupChannel2URL string `json:"backup_channel_2_url"`
+ BackupChannel3URL string `json:"backup_channel_3_url"`
+ URLid string `json:"urlID"`
}
// Notification : Notifikationen im Webinterface
type Notification struct {
- Headline string `json:"headline,required"`
- Message string `json:"message,required"`
- New bool `json:"new,required"`
- Time string `json:"time,required"`
- Type string `json:"type,required"`
+ Headline string `json:"headline"`
+ Message string `json:"message"`
+ New bool `json:"new"`
+ Time string `json:"time"`
+ Type string `json:"type"`
}
// SettingsStruct : Inhalt der settings.json
@@ -325,11 +317,12 @@ type SettingsStruct struct {
XepgReplaceChannelTitle bool `json:"xepg.replace.channel.title"`
ThreadfinAutoUpdate bool `json:"ThreadfinAutoUpdate"`
StoreBufferInRAM bool `json:"storeBufferInRAM"`
+ OmitPorts bool `json:"omitPorts"`
ListeningIp string `json:"listeningIp"`
- ForceHttps bool `json:"forceHttps"`
- HttpsPort int `json:"httpsPort"`
- HttpsThreadfinDomain string `json:"httpsThreadfinDomain"`
- HttpThreadfinDomain string `json:"httpThreadfinDomain"`
+ ForceHttpsToUpstream bool `json:"forceHttps"`
+ UseHttps bool `json:"useHttps"`
+ ForceClientHttps bool `json:"forceClientHttps"`
+ ThreadfinDomain string `json:"threadfinDomain"`
EnableNonAscii bool `json:"enableNonAscii"`
EpgCategories string `json:"epgCategories"`
EpgCategoriesColors string `json:"epgCategoriesColors"`
diff --git a/src/struct-webserver.go b/src/struct-webserver.go
index 39d5e81..8a7a94f 100644
--- a/src/struct-webserver.go
+++ b/src/struct-webserver.go
@@ -3,7 +3,7 @@ package src
// RequestStruct : Anfragen über die Websocket Schnittstelle
type RequestStruct struct {
// Befehle an Threadfin
- Cmd string `json:"cmd,required"`
+ Cmd string `json:"cmd"`
// Benutzer
DeleteUser bool `json:"deleteUser,omitempty"`
@@ -47,11 +47,12 @@ type RequestStruct struct {
SchemeM3U *string `json:"scheme.m3u,omitempty"`
SchemeXML *string `json:"scheme.xml,omitempty"`
StoreBufferInRAM *bool `json:"storeBufferInRAM,omitempty"`
+ OmitPorts *bool `json:"omitPorts,omitempty"`
ListeningIp *string `json:"listeningIp,omitempty"`
- ForceHttps *bool `json:"forceHttps,omitempty"`
- HttpsPort *int `json:"httpsPort,omitempty"`
- HttpsThreadfinDomain *string `json:"httpsThreadfinDomain,omitempty"`
- HttpThreadfinDomain *string `json:"httpThreadfinDomain,omitempty"`
+ ForceHttpsToUpstream *bool `json:"forceHttps,omitempty"`
+ UseHttps *bool `json:"useHttps,omitempty"`
+ ForceClientHttps *bool `json:"forceClientHttps"`
+ ThreadfinDomain *string `json:"threadfinDomain,omitempty"`
EnableNonAscii *bool `json:"enableNonAscii,omitempty"`
EpgCategories *string `json:"epgCategories,omitempty"`
EpgCategoriesColors *string `json:"epgCategoriesColors,omitempty"`
@@ -90,46 +91,46 @@ type ResponseStruct struct {
DVR string `json:"DVR"`
EpgSource string `json:"epgSource"`
Errors int `json:"errors"`
- M3U string `json:"m3u-url,required"`
+ M3U string `json:"m3u-url"`
OS string `json:"os"`
Streams string `json:"streams"`
UUID string `json:"uuid"`
Version string `json:"version"`
Warnings int `json:"warnings"`
XEPGCount int64 `json:"xepg"`
- XML string `json:"xepg-url,required"`
+ XML string `json:"xepg-url"`
} `json:"clientInfo,omitempty"`
Data struct {
Playlist struct {
M3U struct {
Groups struct {
- Text []string `json:"text,required"`
- Value []string `json:"value,required"`
- } `json:"groups,required"`
- } `json:"m3u,required"`
- } `json:"playlist,required"`
+ Text []string `json:"text"`
+ Value []string `json:"value"`
+ } `json:"groups"`
+ } `json:"m3u"`
+ } `json:"playlist"`
StreamPreviewUI struct {
- Active []string `json:"activeStreams,required"`
- Inactive []string `json:"inactiveStreams,required"`
+ Active []string `json:"activeStreams"`
+ Inactive []string `json:"inactiveStreams"`
}
- } `json:"data,required"`
+ } `json:"data"`
Alert string `json:"alert,omitempty"`
- ConfigurationWizard bool `json:"configurationWizard,required"`
+ ConfigurationWizard bool `json:"configurationWizard"`
Error string `json:"err,omitempty"`
- Log WebScreenLogStruct `json:"log,required"`
+ Log WebScreenLogStruct `json:"log"`
LogoURL string `json:"logoURL,omitempty"`
OpenLink string `json:"openLink,omitempty"`
OpenMenu string `json:"openMenu,omitempty"`
Reload bool `json:"reload,omitempty"`
- Settings SettingsStruct `json:"settings,required"`
- Status bool `json:"status,required"`
+ Settings SettingsStruct `json:"settings"`
+ Status bool `json:"status"`
Token string `json:"token,omitempty"`
Users map[string]interface{} `json:"users,omitempty"`
Wizard int `json:"wizard,omitempty"`
- XEPG map[string]interface{} `json:"xepg,required"`
+ XEPG map[string]interface{} `json:"xepg"`
Notification map[string]Notification `json:"notification,omitempty"`
}
@@ -146,7 +147,7 @@ type APIRequestStruct struct {
type APIResponseStruct struct {
EpgSource string `json:"epg.source,omitempty"`
Error string `json:"err,omitempty"`
- Status bool `json:"status,required"`
+ Status bool `json:"status"`
StreamsActive int64 `json:"streams.active,omitempty"`
StreamsAll int64 `json:"streams.all,omitempty"`
StreamsXepg int64 `json:"streams.xepg,omitempty"`
@@ -160,7 +161,7 @@ type APIResponseStruct struct {
// WebScreenLogStruct : Logs werden im RAM gespeichert und für das Webinterface bereitgestellt
type WebScreenLogStruct struct {
- Errors int `json:"errors,required"`
- Log []string `json:"log,required"`
- Warnings int `json:"warnings,required"`
+ Errors int `json:"errors"`
+ Log []string `json:"log"`
+ Warnings int `json:"warnings"`
}
diff --git a/src/system.go b/src/system.go
index dae9c9a..890661d 100644
--- a/src/system.go
+++ b/src/system.go
@@ -149,11 +149,11 @@ func loadSettings() (settings SettingsStruct, err error) {
defaults["port"] = "34400"
defaults["ssdp"] = true
defaults["storeBufferInRAM"] = true
+ defaults["omitPorts"] = false
defaults["listeningIp"]= ""
defaults["forceHttps"] = false
- defaults["httpsPort"] = 443
- defaults["httpsThreadfinDomain"] = ""
- defaults["httpThreadfinDomain"] = ""
+ defaults["useHttps"] = false
+ defaults["threadfinDomain"] = ""
defaults["enableNonAscii"] = false
defaults["epgCategories"] = "Kids:kids|News:news|Movie:movie|Series:series|Sports:sports"
defaults["epgCategoriesColors"] = "kids:mediumpurple|news:tomato|movie:royalblue|series:gold|sports:yellowgreen"
@@ -185,6 +185,8 @@ func loadSettings() (settings SettingsStruct, err error) {
settings.Port = System.Flag.Port
}
+ settings.UseHttps = System.Flag.UseHttps
+
if len(System.Flag.Branch) > 0 {
settings.Branch = System.Flag.Branch
showInfo(fmt.Sprintf("Git Branch:Switching Git Branch to -> %s", settings.Branch))
@@ -217,6 +219,37 @@ func loadSettings() (settings SettingsStruct, err error) {
showWarning(2021)
}
+ // Setzen der globalen Domain
+ // Domainnamen setzen
+ var domain = ""
+ var port = ""
+ if settings.UseHttps || settings.ForceClientHttps {
+ System.ServerProtocol = "https"
+ } else {
+ System.ServerProtocol = "http"
+ }
+ if Settings.ThreadfinDomain != "" {
+ domain = Settings.ThreadfinDomain
+ if Settings.UseHttps {
+ port = Settings.Port
+ if port == "" {
+ port = "34400"
+ }
+ } else {
+ port = Settings.Port
+ }
+
+ } else {
+ domain = System.IPAddress
+ port = Settings.Port
+ }
+ if Settings.OmitPorts {
+ System.Domain = domain
+ } else {
+ System.Domain = fmt.Sprintf("%s:%s", domain, port)
+ }
+ setBaseURL()
+
return settings, nil
}
@@ -254,9 +287,9 @@ func saveSettings(settings SettingsStruct) (err error) {
}
// Zugriff über die Domain ermöglichen
-func setGlobalDomain(domain string) {
+func setBaseURL() {
- System.Domain = domain
+ System.BaseURL = fmt.Sprintf("%s://%s", System.ServerProtocol, System.Domain)
switch Settings.AuthenticationPMS {
case true:
@@ -267,16 +300,16 @@ func setGlobalDomain(domain string) {
switch Settings.AuthenticationM3U {
case true:
- System.Addresses.M3U = System.ServerProtocol.M3U + "://" + System.Domain + "/m3u/threadfin.m3u?username=xxx&password=yyy"
+ System.Addresses.M3U = System.BaseURL + "/m3u/threadfin.m3u?username=xxx&password=yyy"
case false:
- System.Addresses.M3U = System.ServerProtocol.M3U + "://" + System.Domain + "/m3u/threadfin.m3u"
+ System.Addresses.M3U = System.BaseURL + "/m3u/threadfin.m3u"
}
switch Settings.AuthenticationXML {
case true:
- System.Addresses.XML = System.ServerProtocol.XML + "://" + System.Domain + "/xmltv/threadfin.xml?username=xxx&password=yyy"
+ System.Addresses.XML = System.BaseURL + "/xmltv/threadfin.xml?username=xxx&password=yyy"
case false:
- System.Addresses.XML = System.ServerProtocol.XML + "://" + System.Domain + "/xmltv/threadfin.xml"
+ System.Addresses.XML = System.BaseURL + "/xmltv/threadfin.xml"
}
if Settings.EpgSource != "XEPG" && !onlyOnce {
@@ -308,10 +341,9 @@ func setDeviceID() {
}
// Provider Streaming-URL zu Threadfin Streaming-URL konvertieren
-func createStreamingURL(streamingType, playlistID, channelNumber, channelName, url string, backup_url_1 string, backup_url_2 string, backup_url_3 string) (streamingURL string, err error) {
+func createStreamingURL(playlistID, channelNumber, channelName, url string, backup_url_1 string, backup_url_2 string, backup_url_3 string) (streamingURL string, err error) {
var streamInfo StreamInfo
- var serverProtocol string
if len(Data.Cache.StreamingURLS) == 0 {
Data.Cache.StreamingURLS = make(map[string]StreamInfo)
@@ -321,7 +353,6 @@ func createStreamingURL(streamingType, playlistID, channelNumber, channelName, u
if s, ok := Data.Cache.StreamingURLS[urlID]; ok {
streamInfo = s
-
} else {
streamInfo.URL = url
streamInfo.BackupChannel1URL = backup_url_1
@@ -336,24 +367,7 @@ func createStreamingURL(streamingType, playlistID, channelNumber, channelName, u
}
- switch streamingType {
-
- case "DVR":
- serverProtocol = System.ServerProtocol.DVR
-
- case "M3U":
- serverProtocol = System.ServerProtocol.M3U
-
- }
-
- if Settings.ForceHttps {
- if Settings.HttpsThreadfinDomain != "" {
- serverProtocol = "https"
- System.Domain = Settings.HttpsThreadfinDomain
- }
- }
-
- streamingURL = fmt.Sprintf("%s://%s/stream/%s", serverProtocol, System.Domain, streamInfo.URLid)
+ streamingURL = System.BaseURL + "/stream/" + streamInfo.URLid
return
}
diff --git a/src/webUI.go b/src/webUI.go
index 63238db..7a3aad0 100644
--- a/src/webUI.go
+++ b/src/webUI.go
@@ -4,44 +4,43 @@ var webUI = make(map[string]interface{})
func loadHTMLMap() {
- webUI["html/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jhc2UuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQogIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImltZ0NlbnRlciI+PC9kaXY+DQoNCiAgPGRpdiBpZD0iYm94Ij4NCg0KICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4NCiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCiAgICAgIFRocmVhZGZpbiBpcyB1cGRhdGluZyB0aGUgZGF0YWJhc2UsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj48L2Rpdj4NCg0KICA8L2Rpdj4NCg0KPC9ib2R5Pg0KDQo8L2h0bWw+"
- webUI["html/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC"
- webUI["html/img/settings.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0xMFQxODowODo4OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ckxt87EAAAS7SURBVGgFzZpdiFVVGIbn5N+IMgVhaRLqWI7mQIJoIVRgOhQZNDAhWcbcVuPV3BRE6I14440iQQSaN0p6kz8zI0k5inUhZSSaYOVYODMo5eiMOOPf+LzH2cPMPmvttdbe53jOBy9rr2+938/ae51vr733qaoqgQwPD68B/wDJfXAP3AE94JMShCy+SxJ9CvSDJFlU7MiPFdsh/hrBdIffBsd48HApJjLPI4tnPThBlFJMZI5HBuWZCIt9AmgEzeAJR6JzHeMadnKI8wbYCz4Fkz18JlNwMgf8BCL5j4O3bVaMdUfEhPZqgv1U7HbEbDvoT7HZOPUYNwAlHheV09a4A3RTgMqtj9QY7JdgeM5i3I4+fDIYrQeq/UnyNYOTlBDtS+BwEjk2doz+KyO2OY5bwVCME+/qylTHT4C1D3k+uB33Yul3ov/eMuajlu1RH+II5wtT4hNNSnQ6U/kzbRkfq351bCfF8apAm7kmvq38njWRK0S305SHcSK5XO4U5O9MBmXWbSe3E6YccialdKzH2TTnQEF10XgZ5DdivsxEhkyxjVdERAwu03xmMiqD7hYx19km4cyHq6KyeHKkWpSz+ciVrHVpRYZk/wLHp0H2bULkNKzt4Eq86TKxLq3IECf6nXwV9QPbAfjHQSfoD7SN6L63gYhvbrkiTwKf/dPYpbdPVxKMnigdg0VAG8FQye8AzBl6aIk2A+wPiNoHd63LNZx3wbUAvz/CfTzJb/43AmkGpLfAi0DPE/NALQgtve+xFPdi5xRiNkHa5ySOJ/TR7RrBJdqL4AAxL+p+8ToYAFklNCnF3pM1KPba2L6v8vons5oPsko9ZyZoa0PsOoKezxoY+y5N5DYHWSvDTXzUMJH7IUkRW0tbyyV0CcfDDKmqDMe1KfqnQyehGNgo9q8p4hWYFGsiBY4fsSK/BRkkaPgj5PhMy720BnVFesfnlKo3Das0bw8XYJf196GEuzWRLSDoRypLg2w06FyqTS6Cx7iK1eeqGqrnugmuBgvB8+A5UAuqQYiU+oZ4h2T+BV3gAlDp/pai0U1rFpVGMAv8AHzFd4vShMOQLcoB+DNB/sSbM3ZoMV4BQsW0adSJSbNp1Hu1mY40/YZxpPdJaUSfFzrBMXAjjQNsdvll6cHCWVvKJIphdhcny11pqmolCk5aIDif0BKdZBucgPlO8kh/r8O4HtwClSCbk86HtQqQuUrvKVCf5OARjt0lll4H/WKKmbS0tmJQKZNQ7nq9+w0n2LhTN04E8jKMPpZ1hcli8tGTZYEYJwJrZQGzchTGz3a2ifwdkHc73LYAfpx6DcWXQK1LeiDsdpFGx7UOwUGQJKpmGyIjjvWh50iSQWzsZ/ofgvx+jnYp+B/YpJcB7QXDBKPJ4JDF6+/oCwoBuhoL36R+Jp4RJH16u2IgaxJpHhMehsBY3wTjV2YbOuuumLHrwCW6msbSj74O/DHGgV4Ohl8Jw1nSMmsB+tL6Wnw83odzBrhEr2GtgvFE8A74ADxtJZZygMC25cjQqBwqdg62qpUlziUP45Cq6OGuqqoUE/FJ8i+v7MpJYvEsHl1A5gNty2vLmaN3bBLdAvqB3svqXxLRvyEuc9zs7SiA+ACpw05pJx8SoAAAAABJRU5ErkJggg=="
- webUI["html/img/threadfin.png"] = "iVBORw0KGgoAAAANSUhEUgAAAR0AAABQCAYAAAAk26F9AAAIjElEQVR4nO2dvY7kRBDHexEv4IgECeTLCEjmMtLZ8MIBic1nH2HvBUAzj7CTb3ITEq4zApIdiYAEpHVAgkjwIxwaVCUVpbbd1d0ef8z/J620dzvTLpe7//3h6moHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyAG+st3N3dTfmun51za+fc0Tn37QTsAfPn0Tm3dc6dnHO3zrkm8Y42zrkV/TA1lX/MUP5FeXp6Ml/u0zndYA9r+nH0YM+/V5O1FsyBkgTHkUicf99H2n3+/gcqs41tJmGbNDGiw87vct4Q1PTA62U9AjBhctXxLY2Y+uAR0KI7yxjR6VPrITk/kLcjXRuAGM5tZae+V9FPTX/nKdfpGkbnMaJTDGDHHK4NQAwPqs2890zR+qZsJY2U1jT1OpdxmOvTiBGdW48jQ1iLzzSk6haahPk0AGOxEdc91/mYOrwT7acgAZrdojMTIzqnyDdDH1UZtxFlADAnVqpzPgtFDL4OfrZrP59MwAYAlooWC+vonvGNaGLLGh2IDgDTZy9E5ixA93N+rb6kOB0AlsppSW9tMdIBAFwUiA4A4KJAdAAAF+VaRWdFsUYPtEl0R79vMgU/FiouyQdHqr5SOAH/vKrYjlC2FC3+jyqPy3wU+4iGoiA/9tnRdX8llZEj6r3o8cuLCLqbOlu6h1eDb0Lq4Yrq4YvHPx+pfcTE5bVyyV3mMk6nGiBOZ00OYm49cQzbwAp9SNjnVdADLFt2JhdC8LoIfTYPxkrBQZaHjG9ACuHbUDtqiqzVsSuyUb1JeAZWeyryi6wzuk75oomZndo5znbI/zvXhzaf972Vkn450Ge76KuHa/JPqOByvfnf/V/7LvMuQnb4SrbUG8eEm6/EdfQGvpLs0JVTEyIGoWVpCmogWwryTI33sPqWYfsP5OeGGoAsZxMRwRtrD2cp2JM91u/2dSIu4FnVHdcuW37vulZbPdwF2ivhelMGCF4n1yA6bTt89ShIK34hvpdjnwv3PNzz1lTuUW38KwIiV1fUA+tevBHlnejvJX1+rT5fUhkp+3i2VBH77HDClo1qfFv6d46Rb6hfuuzh0ZGlYeXKfDB07E3hmd5afOPoedUpW5KWLjpacCrR0Ns+r6dfO7EjOAXZGHzD9NAH6WtYtZgytVFQJZIiwZWwjgipX3vEPGQz4l6sZ3HlX1FZKeLu80usPbz2FbptoSbR1A20VOtoZzu66tHQewul4ITUmb14zrpNHGPbxJJFZyVSCvB8ua8SsSA9iwrEw8qUTIQPorz7hMZV0NRBNiw5PemiEfene7sPtH4S2tOyHZKKfBRSRk2flZ1CzOK5tEcLjiXTn7RnJ9aELIunVcvoWYrO2fdj7ZeS6zdHQ1RzRYGJz54RYdQ0a8lvr1hwOJoztNdqPJV1k/A2ReZTSREc5xmFHSJC4htqYNKOIjDJFPPoEb6YjHd6QTRWePQUjxtKjD1ympcihFODBedg6ByYxiMw0b5Z+itzFhDrMLDxLOjFOpl7ukOG6YNc/KsSF/TuVa+7CXyTsfaka7AuvEoOid/Xo4k6cVSaej9TJqXOnDwdVVSowdJFJ2VjnB4ZxcZyrFpEzIqOsUl6g9BSRoiw6rceIVO7PvSrags+v4xpz5RJrTPaJ9Y3p/9hXtP5/IsvY64zBqeE/CWOKm4lxCbKwcQ+sSEUxgXJUPgNGpe96amYpRJf3zpGLPsIYS+UUI5tz5SJXvgVaN9GLTmYRefdd9/HXGcMUgSHOamMbbGkvnLXI5CcqSorITpFzykaQ9txMor71OyZMjny7+iOs9z/+IO5ELPofPP1V+aLjMQQTl5FlJsjraTvjKRc6LK6MtJJO5pMwi45Ghu5/uzY9kyZyST9sr8yb/4axJCZEDPayfGwdcW3RpNa6LpHHdKfG2uZ0p4h1mBmm51vythF53c8ByO5Rcd3pElOunp2OYcfopFbyxxaBHFY4wDYRefXn2dwWyCBuR5muOhTMZeEXXR+++XafTY2XTuVU+nacAhAFuyi8+cf8Py4HHH+F5gzyBwIALgoEJ35MdY58k6t9wzxKtlappxmDmHPmL5eLBCdeSDfoowZNzI10ZFvrIawZ0kRyZMBojMPdOMaqweW4lcO0NCt5Wl7cvtlKYGBkwKiMw90DMpYKRd03EpOO/T+shh7ciae1/u6QCYgOvNAb9bLmp3fwEnZYU101UWMYAxtzxg+XjwQnfmQknSrj7Xh2Bf5ur7ItCWjTChnavaAHiA680Gns9hkmk6sxdlfIUKm7XhItMOXgtVCbntcoj2gB4jOfPCljHxM7JE3Ktdx6EKsz46Yhs4jNl6wjY20HsqeuW4JmTQQnXlRebYp7CLOeZIncXKP3hjSfFaeqGirAPLpDbxYm5JdMYc9fCQPixW2hAwERGd++I4N2RiP7H1VO9U5l7Rlp7bvaBc+JrlrEZaPm3lRI5yYXNah9nStV7E9r8oea/JyEMi1nPC5NO5JIPQpCFvRU+uNoasWITiJ8qzwtEZOZUpqxHyelhQSX7CdFLzUYDzOjyxHOJwKZBdoTy1OPkVw4ABcUnSaBSzOTWmOf6BpxWNL4wgJbOPRQUqPfi/s0M+3L2CPTydgv2r/xtj1XgiyvnafPfo8qBz25EK2nzHr4Sl1De6S0ys+NSDHyQg+ZFLuQ6YETLKcfeDDHsKONvhkybcG8eBD995kSBjPHKm894E+OpLdekolTzmtEtKPHsknVnv0lCrVnkpM+VKTxnP7qQNzQQ9VDw/CjqhsBzfWL3x891nMdcDlWPVMpS6RDa/NBj6++NIjhqnZsxhufvr72l0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiMQ59y/gO0FEzNrqtgAAAABJRU5ErkJggg=="
- webUI["html/js/base_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2Jhc2VfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUN6QixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUE7QUFDOUIsSUFBSSxjQUFzQixDQUFBO0FBQzFCLElBQUksdUJBQStCLENBQUE7QUFDbkMsSUFBSSxjQUFjLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUNqQyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBQ3ZCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0FBQzdCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtBQUl4QixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtBQUM1RyxnQ0FBZ0M7QUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBUyxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUV0RCxDQUFDLENBQUMsQ0FBQztBQUNILFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQztJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLENB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"
- webUI["html/css/base.css"] = "KiB7DQogIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsNCiAgLW1vei1hcHBlYXJhbmNlOiBub25lOw0KICAtbXMtYXBwZWFyYW5jZTogbm9uZTsNCiAgZm9udC1mYW1pbHk6ICJBcmlhbCIsIHNhbnMtc2VyaWY7DQogIGxldHRlci1zcGFjaW5nOiAycHg7DQp9DQoNCi8qDQo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgDQogICAgZGlzcGxheTogbm9uZTsgDQp9DQoqLw0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsNCiAgd2lkdGg6IDEycHg7DQogIGhlaWdodDogMTJweDsNCn0NCg0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsNCiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KDQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICBib3JkZXItcmFkaXVzOiA1cHg7DQogIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDZweCByZ2JhKDAsIDAsIDAsIDAuNik7DQogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQp9DQoNCjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KfQ0KDQo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KDQphIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCmh0bWwsDQpib2R5IHsNCiAgY29sb3I6ICNmZmY7DQogIG1hcmdpbjogMHB4IGF1dG87DQogIGhlaWdodDogMTAwJTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQpoMiB7DQogIGZvbnQtc2l6ZTogMjRweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDJweDsNCn0NCg0KaDMgew0KICBmb250LXNpemU6IDIycHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQp9DQoNCmg0IHsNCiAgZm9udC1zaXplOiAyMHB4Ow0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICBsaW5lLWhlaWdodDogMS41ZW07DQoNCn0NCg0KaDUgew0KICBmb250LXNpemU6IDE2cHg7DQogIGxldHRlci1zcGFjaW5nOiAxcHg7DQogIGxpbmUtaGVpZ2h0OiAxLjJlbTsNCiAgbWFyZ2luOiAyNXB4IDBweCAxMHB4IDBweDsNCn0NCg0KaHIgew0KICBib3JkZXI6IDA7DQogIGhlaWdodDogMXB4Ow0KICBiYWNrZ3JvdW5kOiAjMzMzOw0KICBtYXJnaW46IDEwcHggMHB4Ow0KfQ0KDQpwIHsNCiAgbWFyZ2luOiAycHg7DQogIHBhZGRpbmc6IDJweCA1cHg7DQp9DQoNCnByZSB7DQogIG1hcmdpbjogMHB4IDBweCA1cHggMHB4Ow0KICBmb250LXNpemU6IDEycHg7DQogIGNvbG9yOiAjZGRkOw0KICBsZXR0ZXItc3BhY2luZzogMXB4Ow0KICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7DQogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgZm9udC1zdHlsZTogbm9ybWFsOw0KICBmb250LXZhcmlhbnQ6IG5vcm1hbDsNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KfQ0KDQpsYWJlbCB7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KDQpsaSB7DQogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBhbGwgMC4zOw0KfQ0KDQpsaTpob3ZlciB7DQogIGJvcmRlci1jb2xvcjogIzAwRTZGRg0KfQ0KDQpzZWxlY3Qgew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIHdpZHRoOiBjYWxjKDEwMCUgKyAycHgpOw0KICBib3JkZXI6IHNvbGlkIDBweCAjMDBFNkZGOw0KICBib3JkZXItcmFkaXVzOiAwcHg7DQogIG91dGxpbmU6IG5vbmU7DQogIGNvbG9yOiAjZmZmOw0KICBwYWRkaW5nOiA5cHggMTBweDsNCiAgZGlzcGxheTogYmxvY2s7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGZvbnQtc2l6ZTogMTRweDsNCiAgbWFyZ2luOiA1cHggMHB4IDVweCAwcHg7DQp9DQoNCnNlbGVjdDpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0IHsNCiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOw0KICBtYXJnaW46IDBweDsNCiAgcGFkZGluZzogMi41cHggMTBweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgZm9udC1zaXplOiAxNHB4Ow0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl0sDQppbnB1dFt0eXBlPXN1Ym1pdF0gew0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIG1hcmdpbjogMTBweCAxMHB4Ow0KICBwYWRkaW5nOiAxMHB4IDI1cHg7DQogIGJvcmRlcjogc29saWQgMHB4Ow0KICBib3JkZXItY29sb3I6ICMwMDA7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCiAgb3V0bGluZTogbm9uZTsNCiAgY29sb3I6ICNmZmY7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpmb2N1cyB7DQogIG91dGxpbmU6IG5vbmU7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPWJ1dHRvbl06aG92ZXIuZGVsZXRlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOw0KICBjb2xvcjogI2ZmZjsNCn0NCg0KaW5wdXRbdHlwZT10ZXh0XSwNCmlucHV0W3R5cGU9c2VhcmNoXSwNCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgY29sb3I6ICNmZmY7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7DQogIHdpZHRoOiBjYWxjKDEwMCUgLSAwcHgpOw0KICBvdXRsaW5lOiBub25lOw0KICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1ib3R0b20tY29sb3I6ICM1NTU7DQogIGJvcmRlci1yYWRpdXM6IDBweDsNCiAgcGFkZGluZzogOHB4IDEwcHg7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il0gew0KICBib3JkZXI6IHNvbGlkIDFweCAjMDBFNkZGOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBoZWlnaHQ6IDI1cHg7DQogIHdpZHRoOiAyNXB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIC8qDQogIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7DQogICovDQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7DQogIGNvbG9yOiAjZmZmOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOw0KICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7DQogIHBvc2l0aW9uOiBpbml0aWFsOw0KICBsZWZ0OiAwcHg7DQogIG1hcmdpbi1sZWZ0OiAtNHB4Ow0KICBjb250ZW50OiAiICI7DQp9DQoNCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogaW5pdGlhbDsNCiAgbGVmdDogMHB4Ow0KICBtYXJnaW4tbGVmdDogLTNweDsNCiAgY29udGVudDogIuKckyI7DQogIGNvbG9yOiAjMDAwOw0KfQ0KDQppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIGxlZnQ6IDBweDsNCiAgdG9wOiAtMTFweDsNCiAgbWFyZ2luLWxlZnQ6IC0zcHg7DQogIGNvbnRlbnQ6ICLinJMiOw0KICBmb250LXNpemU6IDEuNWVtOw0KICBjb2xvcjogIzAwMDsNCn0NCg0KDQppbnB1dFt0eXBlPWJ1dHRvbl0uY2FuY2VsIHsNCg0KICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiByZWQ7DQp9DQoNCmlucHV0W3R5cGU9YnV0dG9uXS5zYXZlIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQoNCmlucHV0W3R5cGU9YnV0dG9uXS5ibGFjaywNCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KaW5wdXRbdHlwZT1idXR0b25dLmNlbnRlciB7DQogIG1hcmdpbi1yaWdodDogYXV0bzsNCiAgbWFyZ2luLWxlZnQ6IGF1dG87DQogIGJhY2tncm91bmQtY29sb3I6ICMwMDA7DQogIGJvcmRlci1jb2xvcjogIzAwMDsNCn0NCg0KLnBvaW50ZXIgew0KICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi5wb2ludGVyOmhvdmVyIHsNCiAgY29sb3I6ICMwMEU2RkY7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLnNvcnRUaGlzIHsNCiAgY29sb3I6ICMwMEU2RkY7DQp9DQoNCi53NDBweCB7DQogIG1heC13aWR0aDogNDBweDsNCn0NCg0KLnc1MHB4IHsNCiAgbWF4LXdpZHRoOiA1MHB4Ow0KfQ0KDQoudzgwcHggew0KICBtYXgtd2lkdGg6IDgwcHg7DQp9DQoNCi53MTUwcHggew0KICBtYXgtd2lkdGg6IDE1MHB4Ow0KfQ0KDQoudzIwMHB4IHsNCiAgbWF4LXdpZHRoOiAyMDBweDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgd2lkdGg6IDIwMHB4Ow0KICBvdmVyZmxvdy14OiBoaWRkZW47DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIG92ZXJmbG93OiBoaWRkZW47DQogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOw0KfQ0KDQoudzMwMHB4IHsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCn0NCg0KLncyMjBweCB7DQogIG1heC13aWR0aDogMjIwcHg7DQogIGN1cnNvcjogYWxpYXM7DQp9DQoNCi5mb290ZXIgew0KICBmb250LXNpemU6IDEwcHg7DQp9DQoNCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi5zY3JlZW5Mb2dIaWRkZW4gew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7DQp9DQoNCi5ib3JkZXJTcGFjZSB7DQogIG1hcmdpbi1ib3R0b206IDMwcHg7DQp9DQoNCi5ibG9jayB7fQ0KDQoubm9uZSB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCg0KLm5vdFZpc2libGUgew0KICBoZWlnaHQ6IDBweDsNCiAgZGlzcGxheTogbm9uZTsNCiAgb3BhY2l0eTogMDsNCiAgYm9yZGVyLWJvdHRvbTogIzAwMCBzb2xpZCAwcHg7DQoNCn0NCg0KLnZpc2libGUgew0KICBvcGFjaXR5OiAxOw0KICBkaXNwbGF5OiBibG9jazsNCiAgYm9yZGVyLWJvdHRvbTogIzQ0NCBzb2xpZCAxcHg7DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi5mbG9hdFJpZ2h0IHsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouZmxvYXRMZWZ0IHsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5tZW51LWFjdGl2ZSB7DQogIGJhY2tncm91bmQtY29sb3I6ICMwMEU2RkY7DQp9DQoNCnRhYmxlIHsNCiAgd2lkdGg6IDEwMCUNCn0NCg0KLm1lbnUtbm90QWN0aXZlIHt9DQoNCiNicmFuY2ggew0KICBjb2xvcjogcmVkOw0KfQ0KDQojaW50ZXJhY3Rpb24gew0KICBtYXJnaW4tYm90dG9tOiAxMDBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAwcHggIzc3NzsNCn0NCg0KDQouaGFsZiB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogNDUlOw0KfQ0KDQoubWVudSB7DQogIGJvcmRlcjogc29saWQgMXB4ICMwMEU2RkY7DQp9DQoNCi5pbmZvTXNnIHsNCiAgY29sb3I6ICNhYWE7DQp9DQoNCi5lcnJvck1zZyB7DQogIGNvbG9yOiByZWQ7DQp9DQoNCi53YXJuaW5nTXNnIHsNCiAgY29sb3I6IHllbGxvdzsNCn0NCg0KLmRlYnVnTXNnIHsNCiAgY29sb3I6IG1hZ2VudGE7DQp9DQoNCg0KLmNhdGVnb3J5IHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDJweA0KfQ0KDQoubmV3cyB7DQogIGJvcmRlci1jb2xvcjogdG9tYXRvDQp9DQoNCi5tb3ZpZSB7DQogIGJvcmRlci1jb2xvcjogcm95YWxibHVlOw0KfQ0KDQouc2VyaWVzIHsNCiAgYm9yZGVyLWNvbG9yOiBnb2xkOw0KfQ0KDQouc3BvcnRzIHsNCiAgYm9yZGVyLWNvbG9yOiB5ZWxsb3dncmVlbjsNCn0NCg0KLmtpZHMgew0KICBib3JkZXItY29sb3I6IG1lZGl1bXB1cnBsZTsNCn0NCg0KLyogTG9hZGluZyAqLw0KI2xvYWRpbmcgew0KICBsZWZ0OiAwcHg7DQogIHRvcDogMHB4Ow0KICB6LWluZGV4OiAxMDAwMDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7DQogIG1hcmdpbjogYXV0bzsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQoubG9hZGVyIHsNCiAgYm9yZGVyOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMEU2RkY7DQogIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCAjMDBFNkZGOw0KICB3aWR0aDogNTBweDsNCiAgaGVpZ2h0OiA1MHB4Ow0KICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxLjJzIGxpbmVhciBpbmZpbml0ZTsNCiAgYW5pbWF0aW9uOiBzcGluIDEuMnMgbGluZWFyIGluZmluaXRlOw0KDQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgbWFyZ2luOiBhdXRvOw0KDQogIHRvcDogMDsNCiAgcmlnaHQ6IDA7DQogIGJvdHRvbTogMDsNCiAgbGVmdDogMDsNCg0KfQ0KDQpALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7DQogIDAlIHsNCiAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpOw0KICB9DQoNCiAgMTAwJSB7DQogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOw0KICB9DQp9DQoNCkBrZXlmcmFtZXMgc3BpbiB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsNCiAgfQ0KDQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7DQogIH0NCn0="
- webUI["html/js/network_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL25ldHdvcmtfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNO0lBSVYsWUFBWSxHQUFXO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUVsQixJQUFJLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLE9BQU07UUFDUixDQUFDO1FBRUQsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO1FBRXhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzVCLCtCQUErQjtZQUMvQixJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtRQUNyQixDQUFDO1FBRUQsUUFBUSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtnQkFDdkIsTUFBSztZQUNQLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtnQkFDeEIsTUFBSztRQUNULENBQUM7UUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUUzSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQTtRQUN0QixJQUFJLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMzQixFQUFFLENBQUMsTUFBTSxHQUFHO1lBRVYsWUFBWSxHQUFHLElBQUksQ0FBQTtZQUVuQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFFakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWxDLENBQUMsQ0FBQTtRQUVELEVBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1lBRXRCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEZBQThGLENBQUMsQ0FBQTtZQUMzRyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7WUFFekIsSUFBSSxZQUFZLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyw4RkFBOEYsQ0FBQyxDQUFBO1lBQ3ZHLENBQUM7UUFFSCxDQUFDLENBQUE7UUFHRCxFQUFFLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztZQUV4QixpQkFBaUIsR0FBRyxLQUFLLENBQUE7WUFDekIsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUU3QixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWxDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdEIsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNoRCxDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBRWhDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtnQkFFdEIsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFDbkIsQ0FBQztnQkFFRCxPQUFNO1lBQ1IsQ0FBQztZQUdELElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLEdBQUcsR0FBSSxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBc0IsQ0FBQTtnQkFDdkUsR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQy9CLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO2dCQUN6QixPQUFNO1lBQ1IsQ0FBQztZQUVELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssV0FBVztvQkFDZCxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUMvQixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzt3QkFDM0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNqQixDQUFDO29CQUNELE9BQU07b0JBQ04sTUFBTTtnQkFFUjtvQkFDRSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtvQkFDckIsTUFBTSxHQUFHLFFBQVEsQ0FBQTtvQkFDakIsTUFBTTtZQUNWLENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtnQkFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNaLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDN0IsQ0FBQztZQUVELElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN4QyxDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtZQUMxQixDQUFDO1lBRUQsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtZQUNuQixDQUFDO1lBR0QsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLFlBQVksRUFBRSxDQUFBO2dCQUNkLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFBO2dCQUN0RCxPQUFNO1lBQ1IsQ0FBQztZQUVELFlBQVksRUFBRSxDQUFBO1FBRWhCLENBQUMsQ0FBQTtJQUVILENBQUM7Q0FFRjtBQUVELFNBQVMsU0FBUyxDQUFDLElBQUk7SUFDckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDbkMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9ELENBQUMifQ=="
+ webUI["html/img/logout.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xM1QxMToxMDoxODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg27QeEAAANQSURBVGgF7Zk9aBRBGIZzSRSN8YdoCpEkghCCqK1o4g9IsBCCNmIniCAiWAhqI8G02qiIoqCCWggSEcFKEFPYpVAU8QdFUyiKRpRokBjP55OdZDLZvZnZ7N3Ngh887M7sN/O9797t7c5eTc3/8D8DxWKxGS5Ai//oAEYgvB4OwleQaAtAlp8ERG+Bp6Jei/wYQfRy6NfE67vhG0FtA/TBqK7c2A/bCGJ3wpAhOq4ZphGUroEHcYoT+sIygsgmOAu/EwQndYdhBHV1sB8+Jym19Lf6/faVIRuBG+GRRajtcPWMoKwFbtgUOh6vvBGEzYFj8MNRpEtaZY2gaAe8cVHmmXOc/K3QXIZv/+SUFFgJ96AS8ZwiZ6Ab6iZVzGCPiRbCKRiDasQHip6EdD/PDKyFvfAJQgg5kVfB/VoieT0MQojxE1G9UG/7otWS0A7pPkrb7DM/Ppcp+mAAM/bFGEmL4RL8gVDjI8JWOZ0bEjvhSahO0CXXsLMZWZYegREIMV4jaoHTJyNJJLfC7RCdoOm6sxGVyKAeeBegoU6l0XmLiXlwAqp1o4w7j3d1AwW9YdtnNrnQzkOXLddyfAPHv8Ey6ABpd8N88In2QqHwymfARC5mCrAH0i6qGDr9jk3fbNgFz8A1DkwIS7tDpSVwGdLcexIfPZhPHpf2wS+wRX9a/dPGUakLzBdwNgGJRlQBJtgMw5aJ3qr8TLYUmwVHwXXxZTUiwphvHYxDUnzPxIA5CdXa4E5SVa3fyUhkRtYqpSKbNYxpJiq+ncpDJar7GGlknvcl5mqM05BZH4Xl3iOLpLh7j7OR6MScSzAykplg20QIWA0PDSG+RuTdQVy8sNXP9DgK5N4jK9AvkRpfI4sYF/c2836mQl0nQ4zce66AfZFkTMqYl2DGaSMt/CYOHpsuaPco5bLUzUuMGkLHaQ+ovjwZUZrVdpAHRnnw/Bd5MrJCiY62t4x2+E2uBfkfRg95TdSkK8/LJ7JWF83+Nb5Ww0Zf+E3OviwXVMgT8dLwVRsKEd0A+uP8biMlH01MHAYVF/Oh2lCJenkDqpbUN9nPyzU91QnCRbyEPEXn1sQhxMv7tG1T7cW3rK/r44eVtxfxm6gwBh38zJqPJuUtXu3Z/wLwuBaBLgMkKwAAAABJRU5ErkJggg=="
webUI["html/js/menu_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21lbnVfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxRQUFRO0lBQWQ7UUFDRSxlQUFVLEdBQVcsV0FBVyxDQUFBO1FBQ2hDLFlBQU8sR0FBVyxJQUFJLENBQUE7UUFDdEIsY0FBUyxHQUFXLE1BQU0sQ0FBQTtJQWE1QixDQUFDO0lBWEMsU0FBUyxDQUFDLEdBQUc7UUFDWCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDakQsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFlBQWEsU0FBUSxRQUFRO0lBUWpDLFlBQVksT0FBZSxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsUUFBZ0I7UUFDekUsS0FBSyxFQUFFLENBQUE7UUFDUCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDLENBQUMs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QUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQzdDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7d0JBQ2xELEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUE7d0JBQ3RELEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7d0JBRWpDLElBQUksSUFBSSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUE7d0JBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO3dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7d0JBQ2pELEVBQUUsQ0FBQyxXQUFXLENB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"
- webUI["html/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2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30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE="
+ webUI["html/css/screen.css"] = "bmF2IGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWF4LWhlaWdodDogMjBweDsKICBtYXgtd2lkdGg6IDIwcHg7CiAgZmxvYXQ6IGxlZnQ7Cn0KCm5hdiBwIHsKICB0ZXh0LWFsaWduOiBsZWZ0OwogIHBhZGRpbmc6IDBweCAzMHB4Owp9CgojbGF5b3V0IHsKICBkaXNwbGF5OiBibG9jazsKICBoZWlnaHQ6IDEwMCU7Cn0KCi5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQgewogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Owp9CgoubGF5b3V0LWxlZnQgewogIGRpc3BsYXk6IGJsb2NrOwogIG1pbi13aWR0aDogMTUwcHg7CiAgbWF4LXdpZHRoOiAyMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICBoZWlnaHQ6IGluaGVyaXQ7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sYXlvdXQtcmlnaHQgewogIGRpc3BsYXk6IGJsb2NrOwogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7Cn0KCiNtZW51LXdyYXBwZXIgewogIGhlaWdodDogMTAwJTsKfQoKCiNsb2dvIHsKICBkaXNwbGF5OiBibG9jazsKICBtaW4td2lkdGg6IDE4MHB4OwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwcHg7CiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdGhyZWFkZmluLnBuZyIpOwogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOwogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsKfQoKCiNwYWdlIHsKICBtYXgtd2lkdGg6IDk1MHB4OwogIG1hcmdpbjogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OwoKICAvKgogIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMzBweCk7CiAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEzMHB4KTsKICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEzMHB4KTsKICAqLwoKICBtaW4taGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEyMHB4KTsKICBtaW4taGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEyMHB4KTsKICBtaW4taGVpZ2h0OiBjYWxjKDEwMCUgLSAxMjBweCk7CgoKICBib3gtc2hhZG93OiAwcHggNXB4IDVweCAjMjIyOwoKfQoKI3VpU2V0dGluZyB7CiAgZmxvYXQ6IHJpZ2h0OwogIG1hcmdpbi1yaWdodDogMjVweDsKfQoKI2JveCBpbnB1dFt0eXBlPXRleHRdLAojYm94IGlucHV0W3R5cGU9cGFzc3dvcmRdIHsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7Cn0KCiNib3ggaW5wdXRbdHlwZT1zdWJtaXRdIHsKICBtYXJnaW46IDUwcHggYXV0bzsKfQoKI3NldHRpbmdzIHsKICBkaXNwbGF5OiBibG9jazsKICBwYWRkaW5nOiAxMHB4IDEwcHg7Cn0KCiNzZXR0aW5ncyBoNSB7CiAgbWFyZ2luOiA1MHB4IDBweCAxMHB4IDBweDsKfQoKI2NvbnRlbnQtaW50ZXJhY3Rpb24gLnNlYXJjaCB7CiAgd2lkdGg6IDIwMHB4OwogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgcGFkZGluZzogOXB4OwogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgbWFyZ2luOiAxMHB4OwogIGZsb2F0OiByaWdodDsKICBib3JkZXItcmFkaXVzOiAzcHg7Cgp9CgojbXlTdHJlYW1zIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgYm90dG9tOiAwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICB3aWR0aDogMTAwJTsKICBtYXgtd2lkdGg6IDk1MHB4OwoKICAvKgogIG1heC1oZWlnaHQ6IDEwMHB4OwogICovCiAgbWFyZ2luLWJvdHRvbTogMHB4Owp9CgojbXlTdHJlYW1zIGltZyB7CiAgd2lkdGg6IDQlOwogIHBhZGRpbmc6IDJweCA1cHg7CiAgY3Vyc29yOiBwb2ludGVyOwogIGZsb2F0OiByaWdodDsKfQoKI3NldHRpbmdzLWZvb3RlciB7fQoKCi8qIFdpemFyZCovCiNib3ggewogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CiAgbWluLWhlaWdodDogNDAwcHg7CgogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCiNib3ggcCB7CiAgcGFkZGluZzogMTBweCAwcHg7Cn0KCiNib3gtZm9vdGVyIHsKICBtYXJnaW4tdG9wOiBhdXRvOwp9CgojYm94LWZvb3RlciB7CiAgbWFyZ2luOiBhdXRvOwogIHBhZGRpbmc6IDEwcHg7Cn0KCiNoZWFkbGluZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzIyMjsKICB0cmFuc2l0aW9uOiBhbGwgMC41czsKICBwYWRkaW5nOiAxMHB4IDBweDsKICBkaXNwbGF5OiBibG9jazsKfQoKI2NvbnRlbnQgewogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93OiBhdXRvOwogIHBhZGRpbmc6IDEwcHg7Cn0KCi8qIC0tLSAqLwoKCiNjbGllbnRJbmZvLAojYWN0aXZlU3RyZWFtcywKI2luYWN0aXZlU3RyZWFtcyB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBkaXNwbGF5OiBibG9jazsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICMwMEU2RkY7CiAgcGFkZGluZzogMHB4Owp9CgojYWN0aXZlU3RyZWFtcyB0aGVhZCwKI2luYWN0aXZlU3RyZWFtcyB0aGVhZCB7CiAgZm9udC1zaXplOiAyZW07Cn0KCiNvcGVuU3RyZWFtcyB7CiAgd2lkdGg6IDIwcHg7CiAgaGVpZ2h0OiAyMDBweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgZmxvYXQ6IHJpZ2h0OwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogMHB4OwogIGJvdHRvbTogMHB4OwogIGJhY2tncm91bmQ6IHVybCgiLi4vaW1nL3RvdWNoLnBuZyIpOwogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7CgogIGJhY2tncm91bmQtcG9zaXRpb246IGJvdHRvbSByaWdodDsKfQoKI2FsbFN0cmVhbXMgewogIHBhZGRpbmc6IDJweDsKfQoKI2FjdGl2ZVN0cmVhbXMsCiNpbmFjdGl2ZVN0cmVhbXMgewogIC8qIHdpZHRoOiA1MCU7ICovCiAgLyogZmxvYXQ6IGxlZnQ7ICovCn0KCiNhY3RpdmVTdHJlYW1zIC50ZEtleSwKI2luYWN0aXZlU3RyZWFtcyAudGRLZXkgewogIHdpZHRoOiAxMTVweDsKICBsZXR0ZXItc3BhY2luZzogMHB4Owp9CgpjYXB0aW9uIHsKICBjb2xvcjogI0ZGRjsKICBmb250LXNpemU6IDJlbTsKfQoKLnRkS2V5IHsKICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoudGRWYWwgewogIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5tb2RhbC1oZWFkZXIgewogIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7Cn0KLm1vZGFsLWJvZHkgewogIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7Cn0KCiNpbmFjdGl2ZVN0cmVhbXMgLnRkS2V5IHsKICBjb2xvcjogcmVkOwp9CgojY2xpZW50SW5mbyAudGRWYWwsCiNsb2dJbmZvIC50ZFZhbCwKI2FjdGl2ZVN0cmVhbXMgLnRkVmFsLAojaW5hY3RpdmVTdHJlYW1zIC50ZFZhbCwKI21hcHBpbmdJbmZvIC50ZFZhbCB7CiAgY29sb3I6ICNhYWE7CiAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7Cn0KCiNib3gtd3JhcHBlciB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIHdpZHRoOiAxMDAlOwoKICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCiNjb250ZW50X3RhYmxlLAojaW5hY3RpdmVfY29udGVudF90YWJsZSwKI21hcHBpbmctZGV0YWlsLXRhYmxlLAojY29udGVudF90YWJsZSB7CiAgZGlzcGxheTogdGFibGU7CiAgLS1icy10YWJsZS1jb2xvcjogbm9uZTsKICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogIG92ZXJmbG93LXk6IHNjcm9sbDsKfQoKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgewogIG1hcmdpbi10b3A6IDIlOwp9CgoKI2NvbnRlbnRfdGFibGUgLmNvbnRlbnRfdGFibGVfaGVhZGVyLAojaW5hY3RpdmVfY29udGVudF90YWJsZSAuaW5hY3RpdmVfY29udGVudF90YWJsZV9oZWFkZXIgewogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7CiAgaGVpZ2h0OiA1MHB4OwogIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjMTExOwogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggIzMzMzsKICBjdXJzb3I6IGF1dG87Cgp9CgoKdGJvZHkgewogIHdpZHRoOiAxMDAlOwp9CgoKLnRhYmxlRWxsaXBzaXMgewogIHdpZHRoOiAxNTBweDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCiNjb250ZW50X3RhYmxlIGltZywKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgaW1nIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87CiAgbWF4LXdpZHRoOiA2MHB4Owp9CgojY29udGVudF90YWJsZSB0ciwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIgewogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggNDQ0OwogIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCAjMzMzOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKI2NvbnRlbnRfdGFibGUgdHI6aG92ZXIsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwp9CgojY29udGVudF90YWJsZSB0ZCwKI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdGQgewoKICBwYWRkaW5nOiAwcHggMnB4Owp9CgojY29udGVudF90YWJsZSBpbnB1dFt0eXBlPXRleHRdLAojaW5hY3RpdmVfY29udGVudF90YWJsZSBpbnB1dFt0eXBlPXRleHRdIHsKICB3aWR0aDogODAlOwogIG1pbi13aWR0aDogMzVweDsKICBtYXgtd2lkdGg6IDYwcHg7CiAgYm9yZGVyOiAwcHg7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsKICBtYXJnaW4tbGVmdDogNXB4OwogIHRleHQtYWxpZ246IGxlZnQ7Cn0KCiNjb250ZW50X3RhYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdLAojaW5hY3RpdmVfY29udGVudF90YWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSB7CiAgbWF4LXdpZHRoOiAyNXB4OwogIG1hcmdpbjogYXV0bzsKfQoKCi5zaG93QnVsayB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCi5oaWRlQnVsayB7CiAgZGlzcGxheTogbm9uZTsKfQoKLm5vQnVsayB7fQoKI2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHLAojaW5hY3RpdmVfY29udGVudF90YWJsZSB0ci5hY3RpdmVFUEcgewogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggbGF3bmdyZWVuOwp9CgojY29udGVudF90YWJsZSB0ci5ub3RBY3RpdmVFUEcsCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRyB7CiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDNweCByZWQ7Cn0KCgojbG9nU2NyZWVuIHAgewogIHdoaXRlLXNwYWNlOiBwcmU7CiAgZm9udC1zaXplOiAxMHB4OwogIC8qCiAgbGluZS1oZWlnaHQ6IDEuNmVtOwogIGZvbnQtZmFtaWx5OiAiQXJpYWwiLCBzYW5zLXNlcmlmOwogICovCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsKICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC12YXJpYW50OiBub3JtYWw7CiAgbGluZS1oZWlnaHQ6IDEuNmVtOwp9CgojbWFwcGluZy1kZXRhaWwsCiN1c2VyLWRldGFpbCwKI2ZpbGUtZGV0YWlsIHsKICBib3gtc2hhZG93OiAwcHggNXB4IDQwcHggIzAwMDsKICBtYXJnaW4tdG9wOiAyMHB4OwogIG1hcmdpbi1sZWZ0OiBhdXRvOwogIG1hcmdpbi1yaWdodDogYXV0bzsKCiAgbWF4LXdpZHRoOiA2MDBweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOwogIHBhZGRpbmc6IDEwcHg7CiAgb3ZlcmZsb3c6IGF1dG87Cn0KCiNmaWxlLWRldGFpbCBpbnB1dFt0eXBlPXRleHRdIHsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsKICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7Cn0KCiNtYXBwaW5nLWRldGFpbCBpbWcgewogIGRpc3BsYXk6IGJsb2NrOwogIG1heC1oZWlnaHQ6IDMwcHg7CiAgbWFyZ2luLWJvdHRvbTogMjBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KCiNtYXBwaW5nLWRldGFpbCBpbnB1dFt0eXBlPXRleHRdLAojY29udGVudF9zZXR0aW5ncyBpbnB1dFt0eXBlPXRleHRdLAojY29udGVudF9zZXR0aW5ncyBpbnB1dFt0eXBlPXBhc3N3b3JkXSB7CiAgYm9yZGVyOiBzb2xpZCAxcHg7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIHRleHQtYWxpZ246IGxlZnQ7CiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMjBweCk7CiAgd2lkdGg6IC1tb3otY2FsYygxMDAlIC0gMjBweCk7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgojbWFwcGluZy1kZXRhaWwtdGFibGUsCiN1c2VyLWRldGFpbC10YWJsZSB7CiAgZGlzcGxheTogaW5saW5lLXRhYmxlOwogIHdpZHRoOiAxMDAlOwp9CgojY29udGVudF9zZXR0aW5ncyB0YWJsZSB7CiAgZGlzcGxheTogaW5saW5lLXRhYmxlOwogIHRhYmxlLWxheW91dDogZml4ZWQ7CiAgd2lkdGg6IDEwMCU7Cn0KCgojbWFwcGluZy1kZXRhaWwtdGFibGUgdGQsCiN1c2VyLWRldGFpbC10YWJsZSB0ZCB7CiAgcGFkZGluZzogMTBweCAwcHg7Cgp9CgojbWFwcGluZy1kZXRhaWwtdGFibGUgdGQubGVmdCwKI3VzZXItZGV0YWlsLXRhYmxlIHRkLmxlZnQgewogIHdpZHRoOiAzOCU7Cn0KCi5pbnRlcmFjdGlvbiwKI2ludGVyYWN0aW9uIHsKICBtYXJnaW4tdG9wOiAyMHB4OwogIGRpc3BsYXk6IGlubGluZS1mbGV4OwogIGZsb2F0OiByaWdodDsKfQoKLmludGVyYWN0aW9uIGlucHV0W3R5cGU9YnV0dG9uXSwKLmludGVyYWN0aW9uIGlucHV0W3R5cGU9c3VibWl0XSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBtaW4td2lkdGg6IDEwMHB4OwogIG1hcmdpbjogMHB4IDEwcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgojbm90aWZpY2F0aW9uIHsKICBkaXNwbGF5OiBibG9jazsKICBwb3NpdGlvbjogZml4ZWQ7CiAgcmlnaHQ6IDBweDsKICBoZWlnaHQ6IDEwMCU7CiAgd2lkdGg6IDI1MHB4OwoKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOwogIGJveC1zaGFkb3c6IDBweCAwcHggMjBweCAjMDAwOwp9Cgojbm90aWZpY2F0aW9uIGg1IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOwogIHBhZGRpbmc6IDVweCAxMHB4IDVweCAxMHB4Owp9Cgojbm90aWZpY2F0aW9uIHByZSB7CiAgcGFkZGluZzogMHB4IDEwcHggMHB4IDEwcHg7Cn0KCiNub3RpZmljYXRpb24gcCB7CiAgZm9udC1zaXplOiAxMCBweDsKICBtYXJnaW46IDBweDsKICBwYWRkaW5nOiAwcHggMTBweCA1cHggMTBweDsKfQoKI25vdGlmaWNhdGlvbiAuZWxlbWVudCB7CiAgLypwYWRkaW5nOiAwcHggNXB4OyovCiAgbWFyZ2luOiA1cHggNXB4OwogIGJvcmRlci1yYWRpdXM6IDVweDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgxODE4OwogIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkIGdyZWVuOwp9CgoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2MjBweCkgewogIGJvZHkgewogICAgd2lkdGg6IDEwMCU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0OwogIH0KCiAgaDEgewogICAgZm9udC1zaXplOiAyNnB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDNweDsKICB9CgogIG5hdiBwIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogIH0KCgoKICAjaGVhZGVyX2NvbmZpZyB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogMTAwcHg7CiAgICBiYWNrZ3JvdW5kOiB1cmwoIi4uL2ltZy9sb2dvX3dfNjAweDIwMC5wbmciKTsKICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CgogICAgYmFja2dyb3VuZC1zaXplOiAzMDBweCAxMDBweDsKICB9CgogICNzY3JlZW5Mb2cgewogICAgbWFyZ2luLWxlZnQ6IDMwMHB4OwoKICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB0cmFuc3BhcmVudDsKICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4ICMyMjI7CiAgfQoKICAjc2V0dGluZ3MgewogICAgLyoKICAgIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMDBweCk7CiAgICBoZWlnaHQ6IC1tb3otY2FsYygxMDAlIC0gMTAwcHgpOwogICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMDBweCk7CiAgICAqLwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgfQoKCiAgLnNjcmVlbkxvZ0hpZGRlbiB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIDBweCk7CiAgfQoKCiAgI2JveCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1pbi1oZWlnaHQ6IDUwMHB4OwogICAgbWF4LXdpZHRoOiA1MDBweDsKICAgIG1hcmdpbjogMTBweCBhdXRvOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKICAgIGJveC1zaGFkb3c6IDBweCA1cHggNXB4ICMyMjI7CgogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgfQoKICAjc2V0dGluZ3MsCiAgI3NldHRpbmdzLWZvb3RlciB7fQp9CgovKgo9PT09PT09PT09PT09PT0gClNpZGViYXIKPT09PT09PT09PT09PT09CiovCjpyb290IHsKICAvKiBkYXJrIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yKi8KICAtLWNsci1wcmltYXJ5LTE6IGhzbCgyMDUsIDg2JSwgMTclKTsKICAtLWNsci1wcmltYXJ5LTI6IGhzbCgyMDUsIDc3JSwgMjclKTsKICAtLWNsci1wcmltYXJ5LTM6IGhzbCgyMDUsIDcyJSwgMzclKTsKICAtLWNsci1wcmltYXJ5LTQ6IGhzbCgyMDUsIDYzJSwgNDglKTsKICAvKiBwcmltYXJ5L21haW4gY29sb3IgKi8KICAtLWNsci1wcmltYXJ5LTU6IGhzbCgyMDUsIDc4JSwgNjAlKTsKICAvKiBsaWdodGVyIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yICovCiAgLS1jbHItcHJpbWFyeS02OiBoc2woMjA1LCA4OSUsIDcwJSk7CiAgLS1jbHItcHJpbWFyeS03OiBoc2woMjA1LCA5MCUsIDc2JSk7CiAgLS1jbHItcHJpbWFyeS04OiBoc2woMjA1LCA4NiUsIDgxJSk7CiAgLS1jbHItcHJpbWFyeS05OiBoc2woMjA1LCA5MCUsIDg4JSk7CiAgLS1jbHItcHJpbWFyeS0xMDogaHNsKDIwNSwgMTAwJSwgOTYlKTsKICAvKiBkYXJrZXN0IGdyZXkgLSB1c2VkIGZvciBoZWFkaW5ncyAqLwogIC0tY2xyLWdyZXktMTogaHNsKDIwOSwgNjElLCAxNiUpOwogIC0tY2xyLWdyZXktMjogaHNsKDIxMSwgMzklLCAyMyUpOwogIC0tY2xyLWdyZXktMzogaHNsKDIwOSwgMzQlLCAzMCUpOwogIC0tY2xyLWdyZXktNDogaHNsKDIwOSwgMjglLCAzOSUpOwogIC8qIGdyZXkgdXNlZCBmb3IgcGFyYWdyYXBocyAqLwogIC0tY2xyLWdyZXktNTogaHNsKDIxMCwgMjIlLCA0OSUpOwogIC0tY2xyLWdyZXktNjogaHNsKDIwOSwgMjMlLCA2MCUpOwogIC0tY2xyLWdyZXktNzogaHNsKDIxMSwgMjclLCA3MCUpOwogIC0tY2xyLWdyZXktODogaHNsKDIxMCwgMzElLCA4MCUpOwogIC0tY2xyLWdyZXktOTogaHNsKDIxMiwgMzMlLCA4OSUpOwogIC0tY2xyLWdyZXktMTA6IGhzbCgyMTAsIDM2JSwgOTYlKTsKICAtLWNsci13aGl0ZTogI2ZmZjsKICAtLWNsci1yZWQtZGFyazogaHNsKDM2MCwgNjclLCA0NCUpOwogIC0tY2xyLXJlZC1saWdodDogaHNsKDM2MCwgNzElLCA2NiUpOwogIC0tY2xyLWdyZWVuLWRhcms6IGhzbCgxMjUsIDY3JSwgNDQlKTsKICAtLWNsci1ncmVlbi1saWdodDogaHNsKDEyNSwgNzElLCA2NiUpOwogIC0tY2xyLW9yYW5nZTogaHNsKDE0LDkzJSw1MyUpOwogIC0tY2xyLWJsYWNrOiAjMjIyOwogIC0tZmYtcHJpbWFyeTogJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgLS1mZi1zZWNvbmRhcnk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmOwogIC0tdHJhbnNpdGlvbjogYWxsIDAuM3MgbGluZWFyOwogIC0tc3BhY2luZzogMC4xcmVtOwogIC0tcmFkaXVzOiAwLjI1cmVtOwogIC0tbGlnaHQtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAtLWRhcmstc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAtLW1heC13aWR0aDogMTE3MHB4OwogIC0tZml4ZWQtd2lkdGg6IDYyMHB4Owp9Cgouc2lkZWJhci10b2dnbGUgewogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDQ0cmVtOwogIGxlZnQ6IDExcmVtOwogIGZvbnQtc2l6ZTogMnJlbTsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgLyogYW5pbWF0aW9uOiBib3VuY2UgMTBzIGVhc2UtaW4tb3V0IGluZmluaXRlOyAqLwp9Ci5zaWRlYmFyLXRvZ2dsZTpob3ZlciB7CiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOwogIGFuaW1hdGlvbjogZXhwYW5kIC41cyBlYXNlLWluIGZvcndhcmRzOwp9Ci5zaWRlYmFyLXRvZ2dsZTpub3QoOmhvdmVyKSB7CiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOwogIGFuaW1hdGlvbjogY29sbGFwc2UgLjVzIGVhc2Utb3V0IGZvcndhcmRzOwp9CkBrZXlmcmFtZXMgZXhwYW5kIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogIH0KICA1MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yNSk7CiAgfQp9CkBrZXlmcmFtZXMgY29sbGFwc2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yNSk7CiAgfQogIDEwMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9Cn0KCi5zaWRlYmFyLWhlYWRlciB7CiAgZGlzcGxheTogZmxleDsKICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsKfQouY2xvc2UtYnRuIHsKICBwb3NpdGlvbjogZml4ZWQ7CiAgdG9wOiA0NHJlbTsKICBsZWZ0OiA3MHJlbTsKICBmb250LXNpemU6IDJyZW07CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7CiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7CiAgY3Vyc29yOiBwb2ludGVyOwogIGRpc3BsYXk6IG5vbmU7Cn0KLmNsb3NlLWJ0bjpob3ZlciB7CiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOwogIGFuaW1hdGlvbjogZXhwYW5kIC41cyBlYXNlLWluIGZvcndhcmRzOwp9Ci5jbG9zZS1idG46bm90KDpob3ZlcikgewogIGNvbG9yOiB2YXIoLS1jbHItb3JhbmdlKTsKICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsKfQoubG9nbyB7CiAganVzdGlmeS1zZWxmOiBjZW50ZXI7CiAgaGVpZ2h0OiA0MHB4Owp9CgoubGlua3MgYSB7CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAxLjVyZW07CiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7CiAgcGFkZGluZzogMXJlbSAxLjVyZW07CiAgY29sb3I6IHZhcigtLWNsci1ncmV5LTUpOwogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOwp9Ci5saW5rcyBhOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1jbHItcHJpbWFyeS04KTsKICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktNSk7CiAgcGFkZGluZy1sZWZ0OiAxLjc1cmVtOwp9Ci5zb2NpYWwtaWNvbnMgewogIGp1c3RpZnktc2VsZjogY2VudGVyOwogIGRpc3BsYXk6IGZsZXg7CiAgcGFkZGluZy1ib3R0b206IDJyZW07Cn0KLnNvY2lhbC1pY29ucyBhIHsKICBmb250LXNpemU6IDEuNXJlbTsKICBtYXJnaW46IDAgMC41cmVtOwogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS01KTsKICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsKfQouc29jaWFsLWljb25zIGE6aG92ZXIgewogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS0xKTsKfQoKLnNpZGViYXIgewogIHBvc2l0aW9uOiBmaXhlZDsKICB0b3A6IDA7CiAgbGVmdDogMDsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgYmFja2dyb3VuZDogdmFyKC0tY2xyLWJsYWNrKTsKICBkaXNwbGF5OiBncmlkOwogIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsKICByb3ctZ2FwOiAxcmVtOwogIGJveC1zaGFkb3c6IHZhcigtLWNsci1yZWQtZGFyayk7CiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTEwMCUpOwp9Ci5zaG93LXNpZGViYXIgewogIHRyYW5zZm9ybTogdHJhbnNsYXRlKDApOwp9Ci5zaG93LXNpZGViYXIgLmNsb3NlLWJ0biB7CiAgZGlzcGxheTogYmxvY2s7Cn0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjc2cHgpIHsKICAuc2lkZWJhciB7CiAgICB3aWR0aDogMTAwMHB4OwogIH0KfQoKLnNpZGViYXIgLmNhcmQgewogIHdpZHRoOiA0NGVtOwogIG1hcmdpbjogM2VtOwp9Ci5jYXJkIHsKICAvKiBjb2xvcjogdmFyKC0tY2xyLWJsYWNrKTsgKi8KICBib3JkZXI6IDVweCBzb2xpZCB2YXIoLS1jbHItb3JhbmdlKTsKfQovKiAuY2FyZCBpbnB1dFt0eXBlPXRleHRdIHsKICBjb2xvcjogdmFyKC0tY2xyLWJsYWNrKTsKICBvdXRsaW5lOiB2YXIoLS1jbHItYmxhY2spOwogIGJvcmRlcjogc29saWQgMXB4IHZhcigtLWNsci1ibGFjayk7Cn0gKi8KLmNhcmQgbGFiZWwgewogIG1hcmdpbi10b3A6IDJlbTsKfQouY2FyZCBsYWJlbDpmaXJzdC1vZi10eXBlIHsKICBtYXJnaW4tdG9wOiAxZW07Cn0="
+ webUI["html/js/base_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2Jhc2VfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUN6QixJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUE7QUFDOUIsSUFBSSxjQUFzQixDQUFBO0FBQzFCLElBQUksdUJBQStCLENBQUE7QUFDbkMsSUFBSSxjQUFjLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtBQUNqQyxJQUFJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO0FBQ3ZCLElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0FBQzdCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtBQUl4QixNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0FBQ2xGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtBQUM1RyxnQ0FBZ0M7QUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBUyxDQUFDO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUV0RCxDQUFDLENBQUMsQ0FBQztBQUNILFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVMsQ0FBQztJQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLENB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"
webUI["html/js/menu_ts.js"] = "Y2xhc3MgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gIm1haW4tbWVudSI7CiAgICAgICAgdGhpcy5IVE1MVGFnID0gIkxJIjsKICAgICAgICB0aGlzLkltYWdlUGF0aCA9ICJpbWcvIjsKICAgIH0KICAgIGNyZWF0ZUlNRyhzcmMpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwogICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJzcmMiLCB0aGlzLkltYWdlUGF0aCArIHNyYyk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVWYWx1ZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KY2xhc3MgTWFpbk1lbnVJdGVtIGV4dGVuZHMgTWFpbk1lbnUgewogICAgY29uc3RydWN0b3IobWVudUtleSwgdmFsdWUsIGltYWdlLCBoZWFkbGluZSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51S2V5ID0gbWVudUtleTsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgdGhpcy5pbWdTcmMgPSBpbWFnZTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICB9CiAgICBjcmVhdGVJdGVtKCkgewogICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiTEkiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgib25jbGljayIsICJqYXZhc2NyaXB0OiBvcGVuVGhpc01lbnUodGhpcykiKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmlkKTsKICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibmF2LWl0ZW0iKTsKICAgICAgICB2YXIgaW1nID0gdGhpcy5jcmVhdGVJTUcodGhpcy5pbWdTcmMpOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlVmFsdWUodGhpcy52YWx1ZSk7CiAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChpbWcpOwogICAgICAgIGl0ZW0uYXBwZW5kQ2hpbGQodmFsdWUpOwogICAgICAgIHZhciBkb2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLkRvY3VtZW50SUQpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICBzd2l0Y2ggKHRoaXMubWVudUtleSkgewogICAgICAgICAgICBjYXNlICJwbGF5bGlzdCI6CiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlSGVhZGVyID0gWyJ7ey5wbGF5bGlzdC50YWJsZS5wbGF5bGlzdH19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnR1bmVyfX0iLCAie3sucGxheWxpc3QudGFibGUubGFzdFVwZGF0ZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLmF2YWlsYWJpbGl0eX19ICUiLCAie3sucGxheWxpc3QudGFibGUudHlwZX19IiwgInt7LnBsYXlsaXN0LnRhYmxlLnN0cmVhbXN9fSIsICJ7ey5wbGF5bGlzdC50YWJsZS5ncm91cFRpdGxlfX0gJSIsICJ7ey5wbGF5bGlzdC50YWJsZS50dmdJRH19ICUiLCAie3sucGxheWxpc3QudGFibGUudW5pcXVlSUR9fSAlIl07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3sueG1sdHYudGFibGUuZ3VpZGV9fSIsICJ7ey54bWx0di50YWJsZS5sYXN0VXBkYXRlfX0iLCAie3sueG1sdHYudGFibGUuYXZhaWxhYmlsaXR5fX0gJSIsICJ7ey54bWx0di50YWJsZS5jaGFubmVsc319IiwgInt7LnhtbHR2LnRhYmxlLnByb2dyYW1zfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsie3suZmlsdGVyLnRhYmxlLm5hbWV9fSIsICJ7ey5maWx0ZXIudGFibGUudHlwZX19IiwgInt7LmZpbHRlci50YWJsZS5maWx0ZXJ9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgICAgIHRoaXMudGFibGVIZWFkZXIgPSBbInt7LnVzZXJzLnRhYmxlLnVzZXJuYW1lfX0iLCAie3sudXNlcnMudGFibGUucGFzc3dvcmR9fSIsICJ7ey51c2Vycy50YWJsZS53ZWJ9fSIsICJ7ey51c2Vycy50YWJsZS5wbXN9fSIsICJ7ey51c2Vycy50YWJsZS5tM3V9fSIsICJ7ey51c2Vycy50YWJsZS54bWx9fSIsICJ7ey51c2Vycy50YWJsZS5hcGl9fSJdOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgdGhpcy50YWJsZUhlYWRlciA9IFsiQlVMSyIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmxvZ299fSIsICJ7ey5tYXBwaW5nLnRhYmxlLmNoYW5uZWxOYW1lfX0iLCAie3subWFwcGluZy50YWJsZS5wbGF5bGlzdH19IiwgInt7Lm1hcHBpbmcudGFibGUuZ3JvdXBUaXRsZX19IiwgInt7Lm1hcHBpbmcudGFibGUueG1sdHZGaWxlfX0iLCAie3subWFwcGluZy50YWJsZS54bWx0dklEfX0iXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubWVudUtleSwgdGhpcy50YWJsZUhlYWRlcik7CiAgICB9Cn0KY2xhc3MgQ29udGVudCB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudCI7CiAgICAgICAgdGhpcy5IZWFkZXJJRCA9ICJwb3B1cF9oZWFkZXIiOwogICAgICAgIHRoaXMuRm9vdGVySUQgPSAicG9wdXBfZm9vdGVyIjsKICAgICAgICB0aGlzLlRhYmxlSUQgPSAiY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5JbmFjdGl2ZVRhYmxlSUQgPSAiaW5hY3RpdmVfY29udGVudF90YWJsZSI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzcyA9ICJjb250ZW50X3RhYmxlX2hlYWRlciI7CiAgICAgICAgdGhpcy5oZWFkZXJDbGFzc0luYWN0aXZlID0gImluYWN0aXZlX2NvbnRlbnRfdGFibGVfaGVhZGVyIjsKICAgICAgICB0aGlzLmludGVyYWN0aW9uSUQgPSAiY29udGVudC1pbnRlcmFjdGlvbiI7CiAgICB9CiAgICBjcmVhdGVIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDMiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSFIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlQlIoKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiaWQiLCB0aGlzLmludGVyYWN0aW9uSUQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQogICAgY3JlYXRlRElWKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuRGl2SUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVUQUJMRSgpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3RhYmxlJyk7CiAgICAgICAgZWxlbWVudC5pZCA9IHRoaXMuVGFibGVJRDsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3M7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRBQkxFKCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKICAgICAgICBlbGVtZW50LmlkID0gdGhpcy5JbmFjdGl2ZVRhYmxlSUQ7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlUm93KCkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuaGVhZGVyQ2xhc3NJbmFjdGl2ZTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGNyZWF0ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgibTN1IiwgImhkaHIiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ0dW5lciJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJsYXN0LnVwZGF0ZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJwcm92aWRlci5hdmFpbGFiaWxpdHkiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsidHlwZSJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJjb21wYXRpYmlsaXR5Il1bImdyb3VwLnRpdGxlIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsidHZnLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsic3RyZWFtLmlkIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICAgICAgICBkZWxldGUgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVstMV07CiAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXTsKICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgdHIuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgiJyArIGRhdGFba2V5XVsidHlwZSJdICsgJyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtrZXldWyJ0eXBlIl0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gInt7LmZpbHRlci5jdXN0b219fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICJ7ey5maWx0ZXIuZ3JvdXB9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImZpbHRlciJdOwogICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgdmFyIGZpbGVUeXBlcyA9IG5ldyBBcnJheSgieG1sdHYiKTsKICAgICAgICAgICAgICAgIGZpbGVUeXBlcy5mb3JFYWNoKGZpbGVUeXBlID0+IHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2ZpbGVUeXBlXTsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCInICsgZmlsZVR5cGUgKyAnIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIm5hbWUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsibGFzdC51cGRhdGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsicHJvdmlkZXIuYXZhaWxhYmlsaXR5Il07CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bImNvbXBhdGliaWxpdHkiXVsieG1sdHYuY2hhbm5lbHMiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiY29tcGF0aWJpbGl0eSJdWyJ4bWx0di5wcm9ncmFtcyJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MucHVzaCh0cik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGVzID0gbmV3IEFycmF5KCJ1c2VycyIpOwogICAgICAgICAgICAgICAgZmlsZVR5cGVzLmZvckVhY2goZmlsZVR5cGUgPT4gewogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbZmlsZVR5cGVdOwogICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgICAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIicgKyBmaWxlVHlwZSArICciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiZGF0YSJdWyJ1c2VybmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIioqKioqKiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ud2ViIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLnBtcyJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsiZGF0YSJdWyJhdXRoZW50aWNhdGlvbi5tM3UiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIuKckyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gIi0iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2tleV1bImRhdGEiXVsiYXV0aGVudGljYXRpb24ueG1sIl0gPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICLinJMiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9ICItIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJkYXRhIl1bImF1dGhlbnRpY2F0aW9uLmFwaSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAi4pyTIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5jbGFzc05hbWUgPSAiYWN0aXZlRVBHIjsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVsawogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJCVUxLIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbnVtbWVyCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIklOUFVUQ0hBTk5FTCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IGNoYW5nZUNoYW5uZWxOdW1iZXIoIicgKyBrZXkgKyAnIiwgdGhpcyknKQogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvZ28KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiSU1HIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5pbWFnZVVSTCA9IGRhdGFba2V5XVsidHZnLWxvZ28iXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0cyA9IGRhdGFba2V5XVsieC1jYXRlZ29yeSJdLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc05hbWUgPSAiY2F0ZWdvcnkiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0Q29sb3JTZXR0aW5ncyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllc0NvbG9ycyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzX3NwbGl0ID0gY2F0Q29sb3JTZXR0aW5ncy5zcGxpdCgifCIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9yc19zcGxpdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdHNDb2xvcl9zcGxpdCA9IGNvbG9yc19zcGxpdFtpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdHNDb2xvcl9zcGxpdFswXSA9PSBjYXRzWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jbGFzc0NvbG9yID0gY2F0c0NvbG9yX3NwbGl0WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtbmFtZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBsYXlsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL2NlbGwudmFsdWUgPSBkYXRhW2tleV1bIl9maWxlLm0zdS5uYW1lIl0gCiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJfZmlsZS5tM3UuaWQiXSwgIm0zdSIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gR3J1cHBlIChncm91cC10aXRsZSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtZ3JvdXAtdGl0bGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBYTUxUViBEYXRlaQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFba2V5XVsieC14bWx0di1maWxlIl0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIEthbmFsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciB2YWx1ZSA9IHN0ci5zdWJzdHJpbmcoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV1bIngtbWFwcGluZyJdLnN1YnN0cmluZygwLCAyMCkgKyAiLi4uIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcm93cy5wdXNoKHRyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICBhbGVydCgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiVGFibGUgY29udGVudCAobWVudUtleSk6IiwgbWVudUtleSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJvd3M7CiAgICB9CiAgICBjcmVhdGVJbmFjdGl2ZVRhYmxlQ29udGVudChtZW51S2V5KSB7CiAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgdmFyIHJvd3MgPSBuZXcgQXJyYXkoKTsKICAgICAgICBzd2l0Y2ggKG1lbnVLZXkpIHsKICAgICAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgICAgICBCVUxLX0VESVQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNyZWF0ZVNlYXJjaE9iaigpOwogICAgICAgICAgICAgICAgY2hlY2tVbmRvKCJlcGdNYXBwaW5nIik7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiTUFQUElORyIpOwogICAgICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldE9iaktleXMoZGF0YSk7CiAgICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgICAgICAgICAgICAgICAgICB0ci5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1bGsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMSyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQoY2VsbC5jcmVhdGVDZWxsKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBLYW5hbG51bW1lcgogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTlBVVENIQU5ORUwiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LWFjdGl2ZSJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngtY2hhbm5lbElEIl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZGF0YVtrZXldWyJ4LWNoYW5uZWxJRCJdICogMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgLy90ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogY2hhbmdlQ2hhbm5lbE51bWJlcigiJyArIGtleSArICciLCB0aGlzKScpCiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9nbwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJJTUciOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmltYWdlVVJMID0gZGF0YVtrZXldWyJ0dmctbG9nbyJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEthbmFsbmFtZQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRzID0gZGF0YVtrZXldWyJ4LWNhdGVnb3J5Il0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSA9ICJjYXRlZ29yeSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNfc3BsaXQgPSBjYXRDb2xvclNldHRpbmdzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2ldLnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IGNhdHNbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNsYXNzQ29sb3IgPSBjYXRzQ29sb3Jfc3BsaXRbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1uYW1lIl07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGxheWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsiX2ZpbGUubTN1Lm5hbWUiXSAKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShkYXRhW2tleV1bIl9maWxlLm0zdS5pZCJdLCAibTN1IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBHcnVwcGUgKGdyb3VwLXRpdGxlKQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IG5ldyBDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGRhdGFba2V5XVsieC1ncm91cC10aXRsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGQgPSBjZWxsLmNyZWF0ZUNlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgibWFwcGluZyIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLmlkID0ga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIlAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtrZXldWyJ4LXhtbHR2LWZpbGUiXSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBkYXRhW2tleV1bIngteG1sdHYtZmlsZSJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZCA9IGNlbGwuY3JlYXRlQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtYXBwaW5nIiwgdGhpcyknKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gWE1MVFYgS2FuYWwKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwgPSBuZXcgQ2VsbCgpOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHZhbHVlID0gc3RyLnN1YnN0cmluZygxLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gZGF0YVtrZXldWyJ4LW1hcHBpbmciXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRhdGFba2V5XVsieC1tYXBwaW5nIl0uc3Vic3RyaW5nKDAsIDIwKSArICIuLi4iOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRkID0gY2VsbC5jcmVhdGVDZWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoIm1hcHBpbmciLCB0aGlzKScpOwogICAgICAgICAgICAgICAgICAgICAgICB0ZC5pZCA9IGtleTsKICAgICAgICAgICAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICAgICAgICAgICAgICByb3dzLnB1c2godHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNldHRpbmdzIjoKICAgICAgICAgICAgICAgIGFsZXJ0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJUYWJsZSBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcm93czsKICAgIH0KfQpjbGFzcyBDZWxsIHsKICAgIGNyZWF0ZUNlbGwoKSB7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICBpZiAodGhpcy5jaGlsZCA9PSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50OwogICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY2hpbGRUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJQIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NDb2xvcikgewogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvcmRlckNvbG9yID0gdGhpcy5jbGFzc0NvbG9yOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNoaWxkVHlwZSk7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVRDSEFOTkVMIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2c2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVyKHRoaXMpIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gInRleHQiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMSyI6CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAiY2hlY2tib3giOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiQlVMS19IRUFEIjoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9ICJjaGVja2JveCI7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiYnVsayBoaWRlQnVsayI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCkiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgImphdmFzY3JpcHQ6IHNlbGVjdEFsbENoYW5uZWxzKCdpbmFjdGl2ZV9jb250ZW50X3RhYmxlJykiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJJTUciOgogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY2hpbGRUeXBlKTsKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgdGhpcy5pbWFnZVVSTCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VVUkwgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9uZXJyb3IiLCAiamF2YXNjcmlwdDogdGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9JyciKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmVycm9yPSJ0aGlzLm9uZXJyb3I9bnVsbDt0aGlzLnNyYz0nbWlzc2luZy5naWYnOyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSB0aGlzLnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vbmNsaWNrID09IHRydWUpIHsKICAgICAgICAgICAgdGQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgdGhpcy5vbmNsaWNrRnVua3Rpb24pOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRkQ2xhc3NOYW1lICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSB0aGlzLnRkQ2xhc3NOYW1lOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGQ7CiAgICB9Cn0KY2xhc3MgU2hvd0NvbnRlbnQgZXh0ZW5kcyBDb250ZW50IHsKICAgIGNvbnN0cnVjdG9yKG1lbnVJRCkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5tZW51SUQgPSBtZW51SUQ7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdHlwZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgbmFtZSk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICBzaG93KCkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgLy8gQWx0ZW4gSW5oYWx0IGzDtnNjaGVuCiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIHNob3dQcmV2aWV3KGZhbHNlKTsKICAgICAgICAvLyDDnGJlcnNjaHJpZnQKICAgICAgICB2YXIgcG9wdXBfaGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5IZWFkZXJJRCk7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gbWVudUl0ZW1zW3RoaXMubWVudUlEXS5oZWFkbGluZTsKICAgICAgICB2YXIgbWVudUtleSA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0ubWVudUtleTsKICAgICAgICB2YXIgaCA9IHRoaXMuY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpOwogICAgICAgIHZhciBleGlzdGluZ0hlYWRlciA9IHBvcHVwX2hlYWRlci5xdWVyeVNlbGVjdG9yKCdoMycpOwogICAgICAgIGlmIChleGlzdGluZ0hlYWRlcikgewogICAgICAgICAgICBwb3B1cF9oZWFkZXIucmVwbGFjZUNoaWxkKGgsIGV4aXN0aW5nSGVhZGVyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcHVwX2hlYWRlci5hcHBlbmRDaGlsZChoKTsKICAgICAgICB9CiAgICAgICAgdmFyIGhyID0gdGhpcy5jcmVhdGVIUigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChocik7CiAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICB2YXIgZGl2ID0gdGhpcy5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW50ZXJhY3Rpb25JRCk7CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgInBsYXlsaXN0IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiLSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgicGxheWxpc3QiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsIC0xKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoImZpbHRlciIsIHRoaXMpJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdG9nZ2xlJywgJ21vZGFsJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0JywgJyNwb3B1cCcpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhtbHR2IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ubmV3fX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAieG1sdHYiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInhtbHR2IiknKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10b2dnbGUnLCAnbW9kYWwnKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnLCAnI3BvcHVwJyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5uZXd9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJ1c2VycyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IG9wZW5Qb3BVcCgidXNlcnMiKScpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICdtb2RhbCcpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcsICcjcG9wdXAnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCAiIiknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24uYnVsa0VkaXR9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJ1bGtFZGl0KCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoInNlYXJjaCIsICJzZWFyY2giLCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInNlYXJjaE1hcHBpbmciKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suYnV0dG9uLnNlYXJjaH19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAic2VhcmNoIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogc2VhcmNoSW5NYXBwaW5nKCknKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzZXR0aW5ncyI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KCJidXR0b24iLCBtZW51S2V5LCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNhdmVTZXR0aW5ncygpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5iYWNrdXB9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGJhY2t1cCgpOycpOwogICAgICAgICAgICAgICAgaW50ZXJhY3Rpb24uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgbWVudUtleSwgInt7LmJ1dHRvbi5yZXN0b3JlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXN0b3JlKCk7Jyk7CiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbi5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpOwogICAgICAgICAgICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImlkIiwgImJveC13cmFwcGVyIik7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQod3JhcHBlcik7CiAgICAgICAgICAgICAgICB0aGlzLkRpdklEID0gImNvbnRlbnRfc2V0dGluZ3MiOwogICAgICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gdGhpcy5jcmVhdGVESVYoKTsKICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgc2hvd1NldHRpbmdzKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibG9nIjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMuY3JlYXRlSW5wdXQoImJ1dHRvbiIsIG1lbnVLZXksICJ7ey5idXR0b24ucmVzZXRMb2dzfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiByZXNldExvZ3MoKTsnKTsKICAgICAgICAgICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7CiAgICAgICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgICAgIGRvYy5hcHBlbmRDaGlsZCh3cmFwcGVyKTsKICAgICAgICAgICAgICAgIHRoaXMuRGl2SUQgPSAiY29udGVudF9sb2ciOwogICAgICAgICAgICAgICAgdmFyIGxvZ3MgPSB0aGlzLmNyZWF0ZURJVigpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChsb2dzKTsKICAgICAgICAgICAgICAgIHNob3dMb2dzKHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJUb2tlbj0gOyBleHBpcmVzID0gVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU2hvdyBjb250ZW50IChtZW51S2V5KToiLCBtZW51S2V5KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBUYWJlbGxlIGVyc3RlbGxlbiAoZmFsbHMgYmVuw7Z0aWd0KQogICAgICAgIHZhciB0YWJsZUhlYWRlciA9IG1lbnVJdGVtc1t0aGlzLm1lbnVJRF0udGFibGVIZWFkZXI7CiAgICAgICAgaWYgKHRhYmxlSGVhZGVyLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTsKICAgICAgICAgICAgZG9jLmFwcGVuZENoaWxkKHdyYXBwZXIpOwogICAgICAgICAgICB3cmFwcGVyLnNldEF0dHJpYnV0ZSgiaWQiLCAiYm94LXdyYXBwZXIiKTsKICAgICAgICAgICAgdmFyIHRhYmxlID0gdGhpcy5jcmVhdGVUQUJMRSgpOwogICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMuY3JlYXRlVGFibGVSb3coKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgLy8gS29wZnplaWxlIGRlciBUYWJsbGUKICAgICAgICAgICAgdGFibGVIZWFkZXIuZm9yRWFjaChlbGVtZW50ID0+IHsKICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgIGNlbGwuY2hpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiUCI7CiAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJCVUxLIikgewogICAgICAgICAgICAgICAgICAgIGNlbGwuY2hpbGRUeXBlID0gIkJVTEtfSEVBRCI7CiAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNlbGwudmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChtZW51S2V5ID09ICJtYXBwaW5nIikgewogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmNoTm99fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDEpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwudGRDbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoMyk7IjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDQpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrRnVua3Rpb24gPSAiamF2YXNjcmlwdDogc29ydFRhYmxlKDUpOyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNlbGwuY3JlYXRlQ2VsbCgpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7CiAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuY3JlYXRlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICByb3dzLmZvckVhY2godHIgPT4gewogICAgICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGJyID0gdGhpcy5jcmVhdGVCUigpOwogICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoYnIpOwogICAgICAgICAgICAvLyBDcmVhdGUgaW5hY3RpdmUgY2hhbm5lbHMgZm9yIG1hcHBpbmcKICAgICAgICAgICAgaWYgKG1lbnVLZXkgPT0gIm1hcHBpbmciKSB7CiAgICAgICAgICAgICAgICB2YXIgaW5hY3RpdmV0YWJsZSA9IHRoaXMuY3JlYXRlSW5hY3RpdmVUQUJMRSgpOwogICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbmFjdGl2ZXRhYmxlKTsKICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVSb3coKTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEtvcGZ6ZWlsZSBkZXIgVGFibGxlCiAgICAgICAgICAgICAgICB0YWJsZUhlYWRlci5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gbmV3IENlbGwoKTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjZWxsLmNoaWxkVHlwZSA9ICJQIjsKICAgICAgICAgICAgICAgICAgICBjZWxsLnZhbHVlID0gZWxlbWVudDsKICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAiQlVMSyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5jaGlsZFR5cGUgPSAiQlVMS19IRUFEIjsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5hY3RpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC52YWx1ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobWVudUtleSA9PSAibWFwcGluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUuY2hOb319IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgxLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLnRkQ2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSAie3subWFwcGluZy50YWJsZS5jaGFubmVsTmFtZX19IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC5vbmNsaWNrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGlja0Z1bmt0aW9uID0gImphdmFzY3JpcHQ6IHNvcnRUYWJsZSgzLCAnaW5hY3RpdmVfY29udGVudF90YWJsZScpOyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gInt7Lm1hcHBpbmcudGFibGUucGxheWxpc3R9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNCwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09ICJ7ey5tYXBwaW5nLnRhYmxlLmdyb3VwVGl0bGV9fSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGwub25jbGljayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLm9uY2xpY2tGdW5rdGlvbiA9ICJqYXZhc2NyaXB0OiBzb3J0VGFibGUoNSwgJ2luYWN0aXZlX2NvbnRlbnRfdGFibGUnKTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChjZWxsLmNyZWF0ZUNlbGwoKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGluYWN0aXZldGFibGUuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKICAgICAgICAgICAgICAgIC8vIEluaGFsdCBkZXIgVGFiZWxsZQogICAgICAgICAgICAgICAgdmFyIHJvd3MgPSB0aGlzLmNyZWF0ZUluYWN0aXZlVGFibGVDb250ZW50KG1lbnVLZXkpOwogICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKHRyID0+IHsKICAgICAgICAgICAgICAgICAgICBpbmFjdGl2ZXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgc2F2ZVBvcHVwRGF0YSgibWFwcGluZyIsICIiLCBmYWxzZSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3dpdGNoIChtZW51S2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1hcHBpbmciOgogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgICAgIHNob3dQcmV2aWV3KHRydWUpOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgICAgICAgICAgc29ydFRhYmxlKDApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgfQp9CmZ1bmN0aW9uIFBhZ2VSZWFkeSgpIHsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKCJnZXRTZXJ2ZXJDb25maWciKTsKICAgIHNlcnZlci5yZXF1ZXN0KG5ldyBPYmplY3QoKSk7CiAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgdXBkYXRlTG9nKCk7CiAgICB9LCAxMDAwMCk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gY3JlYXRlTGF5b3V0KCkgewogICAgLy8gQ2xpZW50IEluZm8KICAgIHZhciBvYmogPSBTRVJWRVJbImNsaWVudEluZm8iXTsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhvYmopOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pKSB7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGtleXNbaV0pLnZhbHVlID0gb2JqW2tleXNbaV1dOwogICAgICAgIH0KICAgIH0KICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tbWVudSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gTWVuw7wgZXJzdGVsbGVuCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1tZW51IikuaW5uZXJIVE1MID0gIiI7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgIG1lbnVJdGVtc1tpXS5pZCA9IGk7CiAgICAgICAgc3dpdGNoIChtZW51SXRlbXNbaV1bIm1lbnVLZXkiXSkgewogICAgICAgICAgICBjYXNlICJ1c2VycyI6CiAgICAgICAgICAgIGNhc2UgImxvZ291dCI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgbWVudUl0ZW1zW2ldLmNyZWF0ZUl0ZW0oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBvcGVuVGhpc01lbnUoZWxlbWVudCkgewogICAgdmFyIGlkID0gZWxlbWVudC5pZDsKICAgIHZhciBjb250ZW50ID0gbmV3IFNob3dDb250ZW50KGlkKTsKICAgIGNvbnRlbnQuc2hvdygpOwogICAgZW5hYmxlR3JvdXBTZWxlY3Rpb24oIi5idWxrIik7CiAgICByZXR1cm47Cn0KY2xhc3MgUG9wdXBXaW5kb3cgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gInBvcHVwLWN1c3RvbSI7CiAgICAgICAgdGhpcy5JbnRlcmFjdGlvbklEID0gImludGVyYWN0aW9uIjsKICAgICAgICB0aGlzLmRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICB9CiAgICBjcmVhdGVUaXRsZSh0aXRsZSkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdGQuY2xhc3NOYW1lID0gImxlZnQiOwogICAgICAgIHRkLmlubmVySFRNTCA9IHRpdGxlICsgIjoiOwogICAgICAgIHJldHVybiB0ZDsKICAgIH0KICAgIGNyZWF0ZUNvbnRlbnQoZWxlbWVudCkgewogICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgcmV0dXJuIHRkOwogICAgfQogICAgY3JlYXRlSW50ZXJhY3Rpb24oKSB7CiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImlkIiwgInBvcHVwLWludGVyYWN0aW9uIik7CiAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJpbnRlcmFjdGlvbiI7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQoZGl2KTsKICAgIH0KfQpjbGFzcyBQb3B1cENvbnRlbnQgZXh0ZW5kcyBQb3B1cFdpbmRvdyB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICAgIHRoaXMudGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQUJMRSIpOwogICAgfQogICAgY3JlYXRlSGVhZGxpbmUoaGVhZGxpbmUpIHsKICAgICAgICB0aGlzLmRvYy5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkgzIik7CiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBoZWFkbGluZS50b1VwcGVyQ2FzZSgpOwogICAgICAgIHRoaXMuZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgICAgIC8vIFRhYmVsbGUgZXJzdGVsbGVuCiAgICAgICAgdGhpcy50YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdGhpcy5kb2MuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7CiAgICB9CiAgICBhcHBlbmRSb3codGl0bGUsIGVsZW1lbnQpIHsKICAgICAgICB2YXIgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIC8vIEJlemVpY2hudW5nCiAgICAgICAgaWYgKHRpdGxlLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlVGl0bGUodGl0bGUpKTsKICAgICAgICB9CiAgICAgICAgLy8gQ29udGVudAogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChlbGVtZW50KSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICBjcmVhdGVJbnB1dCh0eXBlLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICAgICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YWx1ZSA9ICIiOwogICAgICAgIH0KICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCB0eXBlKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBuYW1lKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZUNoZWNrYm94KG5hbWUpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJjaGVja2JveCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIG5hbWUpOwogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIGNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIHNldCwgZGJLZXkpIHsKICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIik7CiAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgibmFtZSIsIGRiS2V5KTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIGlmIChzZXQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9IHZhbHVlc1swXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KICAgIHNlbGVjdE9wdGlvbihzZWxlY3QsIHZhbHVlKSB7CiAgICAgICAgLy9zZWxlY3Quc2VsZWN0ZWRPcHRpb25zID0gdmFsdWUKICAgICAgICB2YXIgcyA9IHNlbGVjdDsKICAgICAgICBzLm9wdGlvbnNbcy5zZWxlY3RlZEluZGV4XS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICBkZXNjcmlwdGlvbih2YWx1ZSkgewogICAgICAgIHZhciB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRSIik7CiAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHNwYW4uaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgIHRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29udGVudChzcGFuKSk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9CiAgICAvLyBJbnRlcmFrdGlvbgogICAgYWRkSW50ZXJhY3Rpb24oZWxlbWVudCkgewogICAgICAgIHZhciBpbnRlcmFjdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cC1pbnRlcmFjdGlvbiIpOwogICAgICAgIGludGVyYWN0aW9uLmFwcGVuZENoaWxkKGVsZW1lbnQpOwogICAgfQp9CmZ1bmN0aW9uIG9wZW5Qb3BVcChkYXRhVHlwZSwgZWxlbWVudCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgaWQ7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIHVuZGVmaW5lZDoKICAgICAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsRGF0YSgiZmlsdGVyIiwgaWQpOwogICAgICAgICAgICAgICAgICAgIGRhdGFbInR5cGUiXSA9ICJncm91cC10aXRsZSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbERhdGEoImZpbHRlciIsIGlkKTsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiY3VzdG9tLWZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGRhdGFbImlkLnByb3ZpZGVyIl0gPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gZGF0YVR5cGU7CiAgICAgICAgICAgICAgICAgICAgaWQgPSAiLSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWQgPSBlbGVtZW50LmlkOwogICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIGNvbnRlbnQgPSBuZXcgUG9wdXBDb250ZW50KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAicGxheWxpc3QiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5wbGF5bGlzdC5wbGF5bGlzdFR5cGUudGl0bGV9fSIpOwogICAgICAgICAgICAvLyBUeXBlCiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1UiLCAiSERIb21lUnVuIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnbTN1JykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdoZGhyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIiIsICJ0eXBlIik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInR5cGUiKTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAnamF2YXNjcmlwdDogY2hhbmdlQnV0dG9uQWN0aW9uKHRoaXMsICJuZXh0IiwgIm9uY2xpY2siKScpOyAvLyBjaGFuZ2VCdXR0b25BY3Rpb24KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJtM3UiKScpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgJ25leHQnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZmlsZU0zVS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5maWxlTTNVLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIFR1bmVyCiAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImJ1ZmZlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25mb2N1cyIsICJqYXZhc2NyaXB0OiByZXR1cm47Iik7CiAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QudHVuZXIudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAidHVuZXIiOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbZGJLZXldID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGRhdGFbZGJLZXldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAibm90QXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LnBsYXlsaXN0LnR1bmVyLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJtM3UiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJiYWNrIiwgInt7LmJ1dHRvbi5iYWNrfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInBsYXlsaXN0IiknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgibTN1IiwgIicgKyBpZCArICciLCBmYWxzZSwgMSknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJtM3UiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAwKScpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6CiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSGVhZGxpbmUoZGF0YVR5cGUpOwogICAgICAgICAgICAvLyBOYW1lCiAgICAgICAgICAgIHZhciBkYktleSA9ICJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5uYW1lLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlc2NocmVpYnVuZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAiZGVzY3JpcHRpb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBVUkwKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbGUuc291cmNlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sucGxheWxpc3QuZmlsZUhESFIucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sucGxheWxpc3QuZmlsZUhESFIudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVHVuZXIKICAgICAgICAgICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiYnVmZmVyIl0gIT0gIi0iKSB7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR1bmVyIjsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmZvY3VzIiwgImphdmFzY3JpcHQ6IHJldHVybjsiKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5wbGF5bGlzdC50dW5lci50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dW5lciI7CiAgICAgICAgICAgICAgICBpZiAoZGF0YVtkYktleV0gPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0YVtkYktleV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInJlYWRvbmx5IiwgInRydWUiKTsKICAgICAgICAgICAgICAgIGlucHV0LmNsYXNzTmFtZSA9ICJub3RBdmFpbGFibGUiOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnBsYXlsaXN0LnR1bmVyLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbigie3sucGxheWxpc3QudHVuZXIuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAvLyBJbnRlcmFrdGlvbgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUludGVyYWN0aW9uKCk7CiAgICAgICAgICAgIC8vIEzDtnNjaGVuCiAgICAgICAgICAgIGlmIChkYXRhWyJpZC5wcm92aWRlciJdICE9ICItIikgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJoZGhyIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJiYWNrIiwgInt7LmJ1dHRvbi5iYWNrfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBvcGVuUG9wVXAoInBsYXlsaXN0IiknKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgZmFsc2UsIDEpJyk7CiAgICAgICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiaGRociIsICInICsgaWQgKyAnIiwgZmFsc2UsIDApJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gVHlwZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAidHlwZSI7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJNM1U6ICIgKyAie3suZmlsdGVyLnR5cGUuZ3JvdXBUaXRsZX19IiwgIlRocmVhZGZpbjogIiArICJ7ey5maWx0ZXIudHlwZS5jdXN0b21GaWx0ZXJ9fSJdOwogICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJqYXZhc2NyaXB0OiBvcGVuUG9wVXAoJ2dyb3VwLXRpdGxlJykiLCAiamF2YXNjcmlwdDogb3BlblBvcFVwKCdjdXN0b20tZmlsdGVyJykiXTsKICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgImphdmFzY3JpcHQ6IG9wZW5Qb3BVcCgnZ3JvdXAtdGl0bGUnKSIsIGRiS2V5KTsKICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiaWQiLCBpZCk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgJ2phdmFzY3JpcHQ6IGNoYW5nZUJ1dHRvbkFjdGlvbih0aGlzLCAibmV4dCIsICJvbmNsaWNrIik7Jyk7IC8vIGNoYW5nZUJ1dHRvbkFjdGlvbgogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLnR5cGUudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBXZWl0ZXIKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgIm5leHQiLCAie3suYnV0dG9uLm5leHR9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogb3BlblBvcFVwKCJncm91cC10aXRsZSIpJyk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAnbmV4dCcpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiY3VzdG9tLWZpbHRlciI6CiAgICAgICAgY2FzZSAiZ3JvdXAtdGl0bGUiOgogICAgICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5maWx0ZXIuY3VzdG9tfX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKCJ7ey5maWx0ZXIuZ3JvdXB9fSIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIE5hbWUgICAgICAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIm5hbWUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIubmFtZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmRlc2NyaXB0aW9uLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5kZXNjcmlwdGlvbi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBUeXAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInR5cGUiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJoaWRkZW4iLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygiIiwgaW5wdXQpOwogICAgICAgICAgICB2YXIgZmlsdGVyVHlwZSA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgICAgICAgICAgICAgIC8vIEdyb8OfLSBLbGVpbnNjaHJlaWJ1bmcgYmVhY2h0ZW4KICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiY2FzZVNlbnNpdGl2ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2FzZVNlbnNpdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlcnJlZ2VsIChCZW51dHplcmRlZmluaWVydCkKICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiZmlsdGVyIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5maWx0ZXJSdWxlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmZpbHRlclJ1bGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGRiS2V5ICsgIiAiICsgZmlsdGVyVHlwZSkKICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgYmFzaWVyZW5kIGF1ZiBkZW4gR3J1cHBlbiBpbiBkZXIgTTNVCiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImZpbHRlciI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3Vwc00zVSA9IGdldExvY2FsRGF0YSgibTN1R3JvdXBzIiwgIiIpOwogICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gZ3JvdXBzTTNVWyJ0ZXh0Il07CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IGdyb3Vwc00zVVsidmFsdWUiXTsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LmZpbHRlci5maWx0ZXJHcm91cC50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuZmlsdGVyR3JvdXAuZGVzY3JpcHRpb259fSIpOwogICAgICAgICAgICAgICAgICAgIC8vIEdyb8OfLSBLbGVpbnNjaHJlaWJ1bmcgYmVhY2h0ZW4KICAgICAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAiY2FzZVNlbnNpdGl2ZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2FzZVNlbnNpdGl2ZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYktleSA9ICJpbmNsdWRlIjsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LmZpbHRlci5pbmNsdWRlLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLmluY2x1ZGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKCJ7ey5maWx0ZXIuaW5jbHVkZS5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gImV4Y2x1ZGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suZmlsdGVyLmV4Y2x1ZGUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuZXhjbHVkZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5leGNsdWRlLmRlc2NyaXB0aW9ufX0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gTmFtZSAgICAgIAogICAgICAgICAgICB2YXIgZGJLZXkgPSAic3RhcnRpbmdOdW1iZXIiOwogICAgICAgICAgICBpZiAoZGF0YVtkYktleV0gIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksICIxMDAwIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5maWx0ZXIuc3RhcnRpbmdudW1iZXIucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3suZmlsdGVyLnN0YXJ0aW5nbnVtYmVyLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIGNvbnRlbnQuZGVzY3JpcHRpb24oInt7LmZpbHRlci5zdGFydGluZ251bWJlci5kZXNjcmlwdGlvbn19Iik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWNhdGVnb3J5IjsKICAgICAgICAgICAgdmFyIHRleHQgPSBbIi0iXTsKICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiIl07CiAgICAgICAgICAgIHZhciBlcGdDYXRlZ29yaWVzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzIl07CiAgICAgICAgICAgIHZhciBjYXRlZ29yaWVzID0gZXBnQ2F0ZWdvcmllcy5zcGxpdCgifCIpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBjYXQgPSBjYXRlZ29yaWVzW2ldOwogICAgICAgICAgICAgICAgaWYgKGNhdCkgewogICAgICAgICAgICAgICAgICAgIHZhciBjYXRfc3BsaXQgPSBjYXQuc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goY2F0X3NwbGl0WzBdKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChjYXRfc3BsaXRbMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGFbZGJLZXldLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5maWx0ZXIuY2F0ZWdvcnkudGl0bGV9fSIsIHNlbGVjdCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImRlbGV0ZSIsICJ7ey5idXR0b24uZGVsZXRlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoImZpbHRlciIsICInICsgaWQgKyAnIiwgdHJ1ZSwgMCknKTsKICAgICAgICAgICAgaW5wdXQuY2xhc3NOYW1lID0gImRlbGV0ZSI7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIFNwZWljaGVybgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAic2F2ZSIsICJ7ey5idXR0b24uc2F2ZX19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCJmaWx0ZXIiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAwKScpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBjb250ZW50LmNyZWF0ZUhlYWRsaW5lKGRhdGFUeXBlKTsKICAgICAgICAgICAgLy8gTmFtZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAibmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2Lm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYubmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sueG1sdHYuZGVzY3JpcHRpb24ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sueG1sdHYuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gVVJMCiAgICAgICAgICAgIHZhciBkYktleSA9ICJmaWxlLnNvdXJjZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnhtbHR2LmZpbGVYTUxUVi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey54bWx0di5maWxlWE1MVFYudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gSW50ZXJha3Rpb24KICAgICAgICAgICAgY29udGVudC5jcmVhdGVJbnRlcmFjdGlvbigpOwogICAgICAgICAgICAvLyBMw7ZzY2hlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIHRydWUsIDApJyk7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFiYnJlY2hlbgogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJidXR0b24iLCAiY2FuY2VsIiwgInt7LmJ1dHRvbi5jYW5jZWx9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOycpOwogICAgICAgICAgICBjb250ZW50LmFkZEludGVyYWN0aW9uKGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJlbgogICAgICAgICAgICBpZiAoZGF0YVsiaWQucHJvdmlkZXIiXSAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJ1cGRhdGUiLCAie3suYnV0dG9uLnVwZGF0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgieG1sdHYiLCAiJyArIGlkICsgJyIsIGZhbHNlLCAxKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gU3BlaWNoZXJuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5zYXZlfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdvbmNsaWNrJywgJ2phdmFzY3JpcHQ6IHNhdmVQb3B1cERhdGEoInhtbHR2IiwgIicgKyBpZCArICciLCBmYWxzZSwgMCknKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS51c2Vyc319Iik7CiAgICAgICAgICAgIC8vIEJlbnV0emVybmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gInVzZXJuYW1lIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sudXNlcnMudXNlcm5hbWUucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMudXNlcm5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gTmV1ZXMgUGFzc3dvcnQgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJwYXNzd29yZCI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInBhc3N3b3JkIiwgZGJLZXksICIiKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey51c2Vycy5wYXNzd29yZC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5wYXNzd29yZC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXN0w6R0aWd1bmcgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJjb25maXJtIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgicGFzc3dvcmQiLCBkYktleSwgIiIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnVzZXJzLmNvbmZpcm0ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuY29uZmlybS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgV0VCCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi53ZWIiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBpZiAoZGF0YVsiZGVmYXVsdFVzZXIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAiamF2YXNjcmlwdDogcmV0dXJuIGZhbHNlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLndlYi50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgUE1TCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5wbXMiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMucG1zLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEJlcmVjaHRpZ3VuZyBNM1UKICAgICAgICAgICAgdmFyIGRiS2V5ID0gImF1dGhlbnRpY2F0aW9uLm0zdSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goZGJLZXkpOwogICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey51c2Vycy5tM3UudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQmVyZWNodGlndW5nIFhNTAogICAgICAgICAgICB2YXIgZGJLZXkgPSAiYXV0aGVudGljYXRpb24ueG1sIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7LnVzZXJzLnhtbC50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAvLyBCZXJlY2h0aWd1bmcgQVBJCiAgICAgICAgICAgIHZhciBkYktleSA9ICJhdXRoZW50aWNhdGlvbi5hcGkiOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3sudXNlcnMuYXBpLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTMO2c2NoZW4KICAgICAgICAgICAgaWYgKGRhdGFbImRlZmF1bHRVc2VyIl0gIT0gdHJ1ZSAmJiBpZCAhPSAiLSIpIHsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJkZWxldGUiLCAie3suYnV0dG9uLmRlbGV0ZX19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5jbGFzc05hbWUgPSAiZGVsZXRlIjsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgnb25jbGljaycsICdqYXZhc2NyaXB0OiBzYXZlUG9wdXBEYXRhKCInICsgZGF0YVR5cGUgKyAnIiwgIicgKyBpZCArICciLCB0cnVlLCAwKScpOwogICAgICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQWJicmVjaGVuCiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJjYW5jZWwiLCAie3suYnV0dG9uLmNhbmNlbH19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBTcGVpY2hlcm4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgInNhdmUiLCAie3suYnV0dG9uLnNhdmV9fSIpOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2xpY2siLCAnamF2YXNjcmlwdDogc2F2ZVBvcHVwRGF0YSgiJyArIGRhdGFUeXBlICsgJyIsICInICsgaWQgKyAnIiwgImZhbHNlIik7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgY29udGVudC5jcmVhdGVIZWFkbGluZSgie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iKTsKICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jaGFubmVscy1zdGFydCI7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgZGJLZXksIGRhdGFbZGJLZXldKTsKICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWUgdG8gdGhlIGZpcnN0IHNlbGVjdGVkIGNoYW5uZWwKICAgICAgICAgICAgICAgIHZhciBjaGFubmVscyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtjaGFubmVsc1swXV07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoYW5uZWwgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIGNoYW5uZWxbIngtY2hhbm5lbElEIl0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICdqYXZhc2NyaXB0OiBjaGFuZ2VDaGFubmVsTnVtYmVycygiJyArIGNoYW5uZWxzICsgJyIpOycpOwogICAgICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbEdyb3VwU3RhcnQudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBa3RpdiAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYWN0aXZlIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgaW5wdXQuaWQgPSAiYWN0aXZlIjsKICAgICAgICAgICAgLy9pbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIikKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0b2dnbGVDaGFubmVsU3RhdHVzKCciICsgaWQgKyAiJywgdGhpcykiKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuYWN0aXZlLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEthbmFsbmFtZSAKICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtbmFtZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgaW5wdXQuc3R5bGUuYm9yZGVyID0gInNvbGlkIDFweCByZWQiOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsICJ0cnVlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuY2hhbm5lbE5hbWUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbihkYXRhWyJuYW1lIl0pOwogICAgICAgICAgICAvLyBCZXNjaHJlaWJ1bmcgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWRlc2NyaXB0aW9uIjsKICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsIGRiS2V5LCBkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3subWFwcGluZy5kZXNjcmlwdGlvbi5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgY29udGVudC5hcHBlbmRSb3coInt7Lm1hcHBpbmcuZGVzY3JpcHRpb24udGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgLy8gQWt0dWFsaXNpZXJ1bmcgZGVzIEthbmFsbmFtZW5zCiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KCJfdXVpZC5rZXkiKSkgewogICAgICAgICAgICAgICAgaWYgKGRhdGFbIl91dWlkLmtleSJdICE9ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtdXBkYXRlLWNoYW5uZWwtbmFtZSI7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChkYktleSk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy51cGRhdGVDaGFubmVsTmFtZS50aXRsZX19IiwgaW5wdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIExvZ28gVVJMIChLYW5hbCkgCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ0dmctbG9nbyI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAiY2hhbm5lbC1pY29uIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmNoYW5uZWxMb2dvLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEFrdHVhbGlzaWVydW5nIGRlcyBLYW5hbGxvZ29zCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXVwZGF0ZS1jaGFubmVsLWljb24iOwogICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KGRiS2V5KTsKICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgInVwZGF0ZS1pY29uIik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCc7IGNoYW5nZUNoYW5uZWxMb2dvKCciICsgaWQgKyAiJyk7Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnVwZGF0ZUNoYW5uZWxMb2dvLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIC8vIEVyd2VpdGVybiBkZXIgRVBHIEthdGVnb3JpZQogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1jYXRlZ29yeSI7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gWyItIl07CiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIiJdOwogICAgICAgICAgICB2YXIgZXBnQ2F0ZWdvcmllcyA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZXBnQ2F0ZWdvcmllcyJdOwogICAgICAgICAgICB2YXIgY2F0ZWdvcmllcyA9IGVwZ0NhdGVnb3JpZXMuc3BsaXQoInwiKTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY2F0ID0gY2F0ZWdvcmllc1tpXTsKICAgICAgICAgICAgICAgIGlmIChjYXQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2F0X3NwbGl0ID0gY2F0LnNwbGl0KCI6Iik7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGNhdF9zcGxpdFswXSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goY2F0X3NwbGl0WzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhW2RiS2V5XSwgZGJLZXkpOwogICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZFJvdygie3subWFwcGluZy5lcGdDYXRlZ29yeS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgLy8gTTNVIEdydXBwZW50aXRlbAogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1ncm91cC10aXRsZSI7CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLm0zdUdyb3VwVGl0bGUudGl0bGV9fSIsIGlucHV0KTsKICAgICAgICAgICAgaWYgKGRhdGFbImdyb3VwLXRpdGxlIl0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uKGRhdGFbImdyb3VwLXRpdGxlIl0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFhNTFRWIERhdGVpCiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LXhtbHR2LWZpbGUiOwogICAgICAgICAgICB2YXIgeG1sRmlsZSA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIHZhciBzZWxlY3QgPSB4bWx0di5nZXRGaWxlcyhkYXRhW2RiS2V5XSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBkYktleSk7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoImlkIiwgInBvcHVwLXhtbHR2Iik7CiAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBzZXRYbWx0dkNoYW5uZWwoJyIgKyBpZCArICInLHRoaXMsICciICsgZGF0YVsieC1tYXBwaW5nIl0gKyAiJyk7Iik7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnhtbHR2RmlsZS50aXRsZX19Iiwgc2VsZWN0KTsKICAgICAgICAgICAgdmFyIGZpbGUgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgLy8gWE1MVFYgTWFwcGluZwogICAgICAgICAgICB2YXIgZGJLZXkgPSAieC1tYXBwaW5nIjsKICAgICAgICAgICAgdmFyIHhtbHR2ID0gbmV3IFhNTFRWRmlsZSgpOwogICAgICAgICAgICBjb25zdCBjdXJyZW50WG1sVHZJZCA9IGRhdGFbZGJLZXldOwogICAgICAgICAgICBjb25zdCBbeG1sVHZJZENvbnRhaW5lciwgeG1sVHZJZElucHV0LCB4bWxUdklkRGF0YWxpc3RdID0geG1sdHYubmV3WG1sVHZJZFBpY2tlcih4bWxGaWxlLCBjdXJyZW50WG1sVHZJZCk7CiAgICAgICAgICAgIHhtbFR2SWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyJyk7CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAneC1tYXBwaW5nJyk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgICAgICAgICAgeG1sVHZJZElucHV0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWlucHV0Jyk7CiAgICAgICAgICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtpZH0nLCB0aGlzLCAnJHt4bWxGaWxlfScpO2ApOwogICAgICAgICAgICB4bWxUdklkRGF0YWxpc3Quc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgLy8gc29ydFNlbGVjdCh4bWxUdklkRGF0YWxpc3QpOyAvLyBUT0RPOiBCZXR0ZXIgc29ydCBiZWZvcmUgYWRkaW5nCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCd7ey5tYXBwaW5nLnhtbHR2Q2hhbm5lbC50aXRsZX19JywgeG1sVHZJZENvbnRhaW5lcik7CiAgICAgICAgICAgIC8vIEV4dHJhIFBQViBEYXRhCiAgICAgICAgICAgIGlmIChjdXJyZW50WG1sVHZJZCA9PSAiUFBWIikgewogICAgICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtcHB2LWV4dHJhIjsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBkYktleSwgZGF0YVtkYktleV0pOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJwcHYtZXh0cmEiKTsKICAgICAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLnBwdmV4dHJhLnRpdGxlfX0iLCBpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGRiS2V5ID0gIngtYmFja3VwLWNoYW5uZWwtMSI7CiAgICAgICAgICAgIHZhciB4bWx0diA9IG5ldyBYTUxUVkZpbGUoKTsKICAgICAgICAgICAgY29uc3QgYmFja3VwMVhtbFR2SWQgPSBkYXRhW2RiS2V5XTsKICAgICAgICAgICAgY29uc3QgW3htbFR2QmFja3VwMUlkQ29udGFpbmVyLCB4bWxUdkJhY2t1cDFJZElucHV0LCB4bWxUdkJhY2t1cDFJZERhdGFsaXN0XSA9IHhtbHR2Lm5ld1htbFR2SWRQaWNrZXIoeG1sRmlsZSwgYmFja3VwMVhtbFR2SWQpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXItMScpOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZElucHV0LnNldEF0dHJpYnV0ZSgnbGlzdCcsICd4bWx0di1pZC1waWNrZXItZGF0YWxpc3QnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCBkYktleSk7IC8vIFNob3VsZCBzdGF5IHgtbWFwcGluZyBhcyBpdCB3aWxsIGJlIHVzZWQgaW4gZG9uZVBvcHVwRGF0YSB0byBtYWtlIGEgc2VydmVyIHJlcXVlc3QKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoImlkIiwgImJhY2t1cC1jaGFubmVsLTEiKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAxSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtpZH0nLCB0aGlzLCAnJHt4bWxGaWxlfScpO2ApOwogICAgICAgICAgICB4bWxUdkJhY2t1cDFJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0LWJhY2t1cDEnKTsKICAgICAgICAgICAgLy8gc29ydFNlbGVjdCh4bWxUdklkRGF0YWxpc3QpOyAvLyBUT0RPOiBCZXR0ZXIgc29ydCBiZWZvcmUgYWRkaW5nCiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCd7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwxLnRpdGxlfX0nLCB4bWxUdkJhY2t1cDFJZENvbnRhaW5lcik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTIiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDJYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDJJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAySWRJbnB1dCwgeG1sVHZCYWNrdXAySWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGJhY2t1cDJYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTInKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0yIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwMklkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAySWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdC1iYWNrdXAyJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwyLnRpdGxlfX0iLCB4bWxUdkJhY2t1cDJJZENvbnRhaW5lcik7CiAgICAgICAgICAgIHZhciBkYktleSA9ICJ4LWJhY2t1cC1jaGFubmVsLTMiOwogICAgICAgICAgICB2YXIgeG1sdHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICAgICAgICAgIGNvbnN0IGJhY2t1cDNYbWxUdklkID0gZGF0YVtkYktleV07CiAgICAgICAgICAgIGNvbnN0IFt4bWxUdkJhY2t1cDNJZENvbnRhaW5lciwgeG1sVHZCYWNrdXAzSWRJbnB1dCwgeG1sVHZCYWNrdXAzSWREYXRhbGlzdF0gPSB4bWx0di5uZXdYbWxUdklkUGlja2VyKHhtbEZpbGUsIGJhY2t1cDNYbWxUdklkKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItY29udGFpbmVyLTMnKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgZGJLZXkpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCJpZCIsICJiYWNrdXAtY2hhbm5lbC0zIik7CiAgICAgICAgICAgIHhtbFR2QmFja3VwM0lkSW5wdXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsIGBqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJzsgY2hlY2tYbWx0dkNoYW5uZWwoJyR7aWR9JywgdGhpcywgJyR7eG1sRmlsZX0nKTtgKTsKICAgICAgICAgICAgeG1sVHZCYWNrdXAzSWREYXRhbGlzdC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1kYXRhbGlzdC1iYWNrdXAzJyk7CiAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kUm93KCJ7ey5tYXBwaW5nLmJhY2t1cENoYW5uZWwzLnRpdGxlfX0iLCB4bWxUdkJhY2t1cDNJZENvbnRhaW5lcik7CiAgICAgICAgICAgIC8vIEludGVyYWt0aW9uCiAgICAgICAgICAgIGNvbnRlbnQuY3JlYXRlSW50ZXJhY3Rpb24oKTsKICAgICAgICAgICAgLy8gTG9nbyBob2NobGFkZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24udXBsb2FkTG9nb319Iik7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jbGljayIsICdqYXZhc2NyaXB0OiB1cGxvYWRMb2dvKCk7Jyk7CiAgICAgICAgICAgIGNvbnRlbnQuYWRkSW50ZXJhY3Rpb24oaW5wdXQpOwogICAgICAgICAgICAvLyBBYmJyZWNoZW4KICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgiYnV0dG9uIiwgImNhbmNlbCIsICJ7ey5idXR0b24uY2FuY2VsfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIC8vIEZlcnRpZwogICAgICAgICAgICB2YXIgaWRzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgIGlkcyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgICAgICAgICAgaWYgKGlkcy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgaWRzLnB1c2goaWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoImJ1dHRvbiIsICJzYXZlIiwgInt7LmJ1dHRvbi5kb25lfX0iKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNsaWNrIiwgJ2phdmFzY3JpcHQ6IGRvbmVQb3B1cERhdGEoIicgKyBkYXRhVHlwZSArICciLCAiJyArIGlkcyArICciLCAiZmFsc2UiKTsnKTsKICAgICAgICAgICAgY29udGVudC5hZGRJbnRlcmFjdGlvbihpbnB1dCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgc2hvd1BvcFVwRWxlbWVudCgncG9wdXAtY3VzdG9tJyk7Cn0KY2xhc3MgWE1MVFZGaWxlIHsKICAgIGdldEZpbGVzKHNldCkgewogICAgICAgIHZhciBmaWxlSURzID0gZ2V0T2JqS2V5cyhTRVJWRVJbInhlcGciXVsieG1sdHZNYXAiXSk7CiAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgiLSIpOwogICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCItIik7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlSURzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChmaWxlSURzW2ldICE9ICJUaHJlYWRmaW4gRHVtbXkiKSB7CiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZmlsZUlEc1tpXSwgInhtbHR2IiwgImZpbGUudGhyZWFkZmluIikpOwogICAgICAgICAgICAgICAgdGV4dC5wdXNoKGdldFZhbHVlRnJvbVByb3ZpZGVyRmlsZShmaWxlSURzW2ldLCAieG1sdHYiLCAibmFtZSIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGZpbGVJRHNbaV0pOwogICAgICAgICAgICAgICAgdGV4dC5wdXNoKGZpbGVJRHNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTRUxFQ1QiKTsKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpOwogICAgICAgICAgICBvcHRpb24uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIHZhbHVlc1tpXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0ZXh0W2ldOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Q7CiAgICB9CiAgICAvKioKICAgKiBAcGFyYW0geG1sVHZGaWxlIFhNTCBmaWxlIHBhdGggdG8gZ2V0IEVQRyBmcm9tLgogICAqIEBwYXJhbSBjdXJyZW50WG1sVHZJZCBDdXJyZW50IFhNTFRWIElEIHRvIHNldCBpbml0aWFsIGlucHV0IHZhbHVlIHRvLgogICAqIEByZXR1cm5zIEFycmF5IG9mLCBzZXF1ZW50aWFsbHk6CiAgICogMSkgQ29udGFpbmVyIG9mIHRoZSBwaWNrZXIuCiAgICogMikgSW5wdXQgZmllbGQgdG8gdHlwZSBhdCBhbmQgZ2V0IGNob2ljZSBmcm9tLgogICAqIDMpIERhdGFsaXN0IGNvbnRhaW5pbmcgZXZlcnkgb3B0aW9uLgogICAqLwogICAgbmV3WG1sVHZJZFBpY2tlcih4bWxUdkZpbGUsIGN1cnJlbnRYbWxUdklkKSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7CiAgICAgICAgLy8gSW5pdGlhbGx5LCBzZXQgdmFsdWUgdG8gJy0nIGlmIGlucHV0IGlzIGVtcHR5CiAgICAgICAgaW5wdXQudmFsdWUgPSAoY3VycmVudFhtbFR2SWQpID8gY3VycmVudFhtbFR2SWQgOiAnLSc7CiAgICAgICAgLy8gV2hlbiBpbnB1dCBpcyBmb2N1c2VkLCByZW1vdmUgJy0nIGZyb20gaXQKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIChldnQpID0+IHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gKHRhcmdldC52YWx1ZSA9PT0gJy0nKSA/ICcnIDogdGFyZ2V0LnZhbHVlOwogICAgICAgIH0pOwogICAgICAgIC8vIFdoZW4gaW5wdXQgbG9zZSBmb2N1cyBvciB0YWtlIGEgdmFsdWUsIGlmIGl0J3MgZW1wdHksIHNldCB2YWx1ZSB0byAnLScKICAgICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgc2V0RmFsbGJhY2tWYWx1ZSk7CiAgICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgc2V0RmFsbGJhY2tWYWx1ZSk7CiAgICAgICAgZnVuY3Rpb24gc2V0RmFsbGJhY2tWYWx1ZShldnQpIHsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldDsKICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gKHRhcmdldC52YWx1ZSkgPyB0YXJnZXQudmFsdWUgOiAnLSc7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgY29uc3QgZGF0YWxpc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkYXRhbGlzdCcpOwogICAgICAgIGNvbnN0IG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwogICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJy0nKTsKICAgICAgICBvcHRpb24uaW5uZXJUZXh0ID0gJy0nOwogICAgICAgIGRhdGFsaXN0LmFwcGVuZENoaWxkKG9wdGlvbik7CiAgICAgICAgY29uc3QgZXBnID0gU0VSVkVSWyd4ZXBnJ11bJ3htbHR2TWFwJ11beG1sVHZGaWxlXTsKICAgICAgICBpZiAoZXBnKSB7CiAgICAgICAgICAgIGNvbnN0IHByb2dyYW1JZHMgPSBnZXRPd25PYmpQcm9wcyhlcGcpOwogICAgICAgICAgICBwcm9ncmFtSWRzLmZvckVhY2goKHByb2dyYW1JZCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgcHJvZ3JhbSA9IGVwZ1twcm9ncmFtSWRdOwogICAgICAgICAgICAgICAgaWYgKHByb2dyYW0uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXktbmFtZScpKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBwcm9ncmFtSWQpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBwcm9ncmFtWyJkaXNwbGF5LW5hbWUiXTsKICAgICAgICAgICAgICAgICAgICBkYXRhbGlzdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBwcm9ncmFtSWQpOwogICAgICAgICAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSAnLSc7CiAgICAgICAgICAgICAgICAgICAgZGF0YWxpc3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXRhbGlzdCk7CiAgICAgICAgcmV0dXJuIFtjb250YWluZXIsIGlucHV0LCBkYXRhbGlzdF07CiAgICB9CiAgICBnZXRQcm9ncmFtcyhmaWxlLCBzZXQsIGFjdGl2ZSkgewogICAgICAgIC8vdmFyIGZpbGVJRHM6c3RyaW5nW10gPSBnZXRPYmpLZXlzKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdKQogICAgICAgIHZhciB2YWx1ZXMgPSBnZXRPYmpLZXlzKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdW2ZpbGVdKTsKICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgIHZhciBkaXNwbGF5TmFtZTsKICAgICAgICB2YXIgYWN0aXZlcyA9IGdldE9iaktleXMoU0VSVkVSWyJkYXRhIl1bIlN0cmVhbVByZXZpZXdVSSJdWyJhY3RpdmVTdHJlYW1zIl0pOwogICAgICAgIHZhciBhY3RpdmVfbGlzdCA9IG5ldyBBcnJheSgpOwogICAgICAgIGlmIChhY3RpdmUgPT0gdHJ1ZSkgewogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBuYW1lc19zcGxpdCA9IFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVsiYWN0aXZlU3RyZWFtcyJdW2FjdGl2ZXNbaV1dLnNwbGl0KCJbIik7CiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZSA9IG5hbWVzX3NwbGl0WzBdLnRyaW0oKTsKICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5TmFtZSAhPSAiIikgewogICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3QgPSB7ICJ2YWx1ZSI6IGRpc3BsYXlOYW1lLCAiZGlzcGxheSI6IGRpc3BsYXlOYW1lIH07CiAgICAgICAgICAgICAgICAgICAgYWN0aXZlX2xpc3QucHVzaChvYmplY3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdW2ZpbGVdW3ZhbHVlc1tpXV0uaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXktbmFtZScpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZSA9IFNFUlZFUlsieGVwZyJdWyJ4bWx0dk1hcCJdW2ZpbGVdW3ZhbHVlc1tpXV1bImRpc3BsYXktbmFtZSJdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWUgPSAiLSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ZXh0W2ldID0gZGlzcGxheU5hbWUgKyAiICgiICsgdmFsdWVzW2ldICsgIikiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRleHQudW5zaGlmdCgiLSIpOwogICAgICAgIHZhbHVlcy51bnNoaWZ0KCItIik7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpOwogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7CiAgICAgICAgICAgIG9wdGlvbi5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWVzW2ldKTsKICAgICAgICAgICAgb3B0aW9uLmlubmVyVGV4dCA9IHRleHRbaV07CiAgICAgICAgICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24pOwogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZV9saXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTsKICAgICAgICAgICAgb3B0aW9uLnNldEF0dHJpYnV0ZSgidmFsdWUiLCBhY3RpdmVfbGlzdFtpXVsidmFsdWUiXSk7CiAgICAgICAgICAgIG9wdGlvbi5pbm5lclRleHQgPSBhY3RpdmVfbGlzdFtpXVsiZGlzcGxheSJdOwogICAgICAgICAgICBzZWxlY3QuYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldCAhPSAiIikgewogICAgICAgICAgICBzZWxlY3QudmFsdWUgPSBzZXQ7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxlY3QudmFsdWUgIT0gc2V0KSB7CiAgICAgICAgICAgIHNlbGVjdC52YWx1ZSA9ICItIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNlbGVjdDsKICAgIH0KfQpmdW5jdGlvbiBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZmlsZSwgZmlsZVR5cGUsIGtleSkgewogICAgaWYgKGZpbGUgPT0gIlRocmVhZGZpbiBEdW1teSIpIHsKICAgICAgICByZXR1cm4gZmlsZTsKICAgIH0KICAgIHZhciBmaWxlSUQ7CiAgICB2YXIgaW5kaWNhdG9yID0gZmlsZS5jaGFyQXQoMCk7CiAgICBzd2l0Y2ggKGluZGljYXRvcikgewogICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICBmaWxlVHlwZSA9ICJtM3UiOwogICAgICAgICAgICBmaWxlSUQgPSBmaWxlOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJIIjoKICAgICAgICAgICAgZmlsZVR5cGUgPSAiaGRociI7CiAgICAgICAgICAgIGZpbGVJRCA9IGZpbGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlgiOgogICAgICAgICAgICBmaWxlVHlwZSA9ICJ4bWx0diI7CiAgICAgICAgICAgIGZpbGVJRCA9IGZpbGUuc3Vic3RyaW5nKDAsIGZpbGUubGFzdEluZGV4T2YoJy4nKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtmaWxlVHlwZV0uaGFzT3duUHJvcGVydHkoZmlsZUlEKSA9PSB0cnVlKSB7CiAgICAgICAgdmFyIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZmlsZVR5cGVdW2ZpbGVJRF07CiAgICAgICAgcmV0dXJuIGRhdGFba2V5XTsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzZXRYbWx0dkNoYW5uZWwoZXBnTWFwSWQsIHhtbFR2RmlsZVNlbGVjdCkgewogICAgY29uc3QgeG1sVHYgPSBuZXcgWE1MVFZGaWxlKCk7CiAgICBjb25zdCBuZXdYbWxUdkZpbGUgPSB4bWxUdkZpbGVTZWxlY3QudmFsdWU7CiAgICAvLyBSZW1vdmUgb2xkIFhNTFRWIElEIHNlbGVjdGlvbiBib3gKICAgIGNvbnN0IHhtbFR2SWRQaWNrZXJQYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneG1sdHYtaWQtcGlja2VyLWNvbnRhaW5lcicpLnBhcmVudEVsZW1lbnQ7CiAgICB4bWxUdklkUGlja2VyUGFyZW50LmlubmVySFRNTCA9ICcnOwogICAgLy8gQ3JlYXRlIG5ldyBYTUxUViBJRCBzZWxlY3Rpb24gYm94CiAgICBjb25zdCB0dmdJZCA9IFNFUlZFUlsneGVwZyddWydlcGdNYXBwaW5nJ11bZXBnTWFwSWRdWyd0dmctaWQnXTsKICAgIGNvbnN0IFt4bWxUdklkQ29udGFpbmVyLCB4bWxUdklkSW5wdXQsIHhtbFR2SWREYXRhbGlzdF0gPSB4bWxUdi5uZXdYbWxUdklkUGlja2VyKG5ld1htbFR2RmlsZSwgdHZnSWQpOwogICAgeG1sVHZJZENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3htbHR2LWlkLXBpY2tlci1jb250YWluZXInKTsKICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ2xpc3QnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3gtbWFwcGluZycpOyAvLyBTaG91bGQgc3RheSB4LW1hcHBpbmcgYXMgaXQgd2lsbCBiZSB1c2VkIGluIGRvbmVQb3B1cERhdGEgdG8gbWFrZSBhIHNlcnZlciByZXF1ZXN0CiAgICB4bWxUdklkSW5wdXQuc2V0QXR0cmlidXRlKCdpZCcsICd4bWx0di1pZC1waWNrZXItaW5wdXQnKTsKICAgIHhtbFR2SWRJbnB1dC5zZXRBdHRyaWJ1dGUoJ29uY2hhbmdlJywgYGphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnOyBjaGVja1htbHR2Q2hhbm5lbCgnJHtlcGdNYXBJZH0nLCB0aGlzLnZhbHVlLCAnJHtuZXdYbWxUdkZpbGV9Jyk7YCk7CiAgICB4bWxUdklkSW5wdXQuY2xhc3NMaXN0LmFkZCgnY2hhbmdlZCcpOwogICAgeG1sVHZJZERhdGFsaXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAneG1sdHYtaWQtcGlja2VyLWRhdGFsaXN0Jyk7CiAgICAvLyBBZGQgbmV3IFhNTFRWIElEIHNlbGVjdGlvbiBib3ggdG8gaXQncyBwYXJlbnQKICAgIHhtbFR2SWRQaWNrZXJQYXJlbnQuYXBwZW5kQ2hpbGQoeG1sVHZJZENvbnRhaW5lcik7CiAgICBjaGVja1htbHR2Q2hhbm5lbChlcGdNYXBJZCwgeG1sVHZJZElucHV0LnZhbHVlLCBuZXdYbWxUdkZpbGUpOwp9CmZ1bmN0aW9uIGNoZWNrUFBWKHRpdGxlLCBlbGVtZW50KSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlOwogICAgY29uc29sZS5sb2coIkRVTU1ZIFRZUEU6ICIgKyB2YWx1ZSk7CiAgICBpZiAodmFsdWUgPT0gIlBQViIpIHsKICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieC1wcHYtZXh0cmEiKS5wYXJlbnRFbGVtZW50OwogICAgICAgIHRkLmlubmVySFRNTCA9ICIiOwogICAgICAgIHZhciBkYktleSA9ICJ4LXBwdi1leHRyYSI7CiAgICAgICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dCIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIGRiS2V5KTsKICAgICAgICAvLyBpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwgdmFsdWUpCiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiaWQiLCAicHB2LWV4dHJhIik7CiAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAvLyBCZXplaWNobnVuZwogICAgICAgIGlmICh0aXRsZS5sZW5ndGggIT0gMCkgewogICAgICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICB0ZC5jbGFzc05hbWUgPSAibGVmdCI7CiAgICAgICAgICAgIHRkLmlubmVySFRNTCA9IHRpdGxlICsgIjoiOwogICAgICAgIH0KICAgICAgICAvLyBDb250ZW50CiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7CiAgICAgICAgdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0cik7CiAgICB9Cn0KZnVuY3Rpb24gY2hlY2tYbWx0dkNoYW5uZWwoaWQsIGVsZW1lbnQsIHhtbEZpbGUpIHsKICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7CiAgICB2YXIgYm9vbDsKICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY3RpdmUnKTsKICAgIHZhciBjaGFubmVsID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXVtpZF07CiAgICB2YXIgdXBkYXRlTG9nbzsKICAgIGlmICh2YWx1ZSA9PSAiLSIpIHsKICAgICAgICBib29sID0gZmFsc2U7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBib29sID0gdHJ1ZTsKICAgIH0KICAgIGNoZWNrYm94LmNoZWNrZWQgPSBib29sOwogICAgY2hlY2tib3guY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgY29uc29sZS5sb2coeG1sRmlsZSk7CiAgICAvLyBLYW5hbGxvZ28gYWt0dWFsaXNpZXJlbgogICAgLyoKICAgIHVwZGF0ZUxvZ28gPSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZAogICAgY29uc29sZS5sb2codXBkYXRlTG9nbyk7CiAgICAqLwogICAgaWYgKHhtbEZpbGUgIT0gIlRocmVhZGZpbiBEdW1teSIgJiYgYm9vbCA9PSB0cnVlKSB7CiAgICAgICAgLy8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgLy8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikgYXMgSFRNTElucHV0RWxlbWVudCkuY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgICAgIGNvbnNvbGUubG9nKCJJRCIsIGlkKTsKICAgICAgICBjaGFuZ2VDaGFubmVsTG9nbyhpZCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHhtbEZpbGUgPT0gIlRocmVhZGZpbiBEdW1teSIpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBkYXRlLWljb24iKS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVwZGF0ZS1pY29uIikuY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxMb2dvKGVwZ01hcElkKSB7CiAgICBjb25zdCBjaGFubmVsID0gU0VSVkVSWyd4ZXBnJ11bJ2VwZ01hcHBpbmcnXVtlcGdNYXBJZF07CiAgICBjb25zdCB4bWxUdkZpbGVTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wdXAteG1sdHYnKTsKICAgIGNvbnN0IHhtbFR2RmlsZSA9IHhtbFR2RmlsZVNlbGVjdC5vcHRpb25zW3htbFR2RmlsZVNlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGNvbnN0IHhtbFR2SWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd4bWx0di1pZC1waWNrZXItaW5wdXQnKTsKICAgIGNvbnN0IG5ld1htbFR2SWQgPSB4bWxUdklkSW5wdXQudmFsdWU7CiAgICBjb25zdCB1cGRhdGVMb2dvID0gIUJVTEtfRURJVCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKS5jaGVja2VkOwogICAgbGV0IGxvZ287CiAgICBpZiAodXBkYXRlTG9nbyA9PSB0cnVlICYmIHhtbFR2RmlsZSAhPSAnVGhyZWFkZmluIER1bW15JykgewogICAgICAgIGlmIChTRVJWRVJbJ3hlcGcnXVsneG1sdHZNYXAnXVt4bWxUdkZpbGVdLmhhc093blByb3BlcnR5KG5ld1htbFR2SWQpKSB7CiAgICAgICAgICAgIGxvZ28gPSBTRVJWRVJbJ3hlcGcnXVsneG1sdHZNYXAnXVt4bWxUdkZpbGVdW25ld1htbFR2SWRdWydpY29uJ107CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsb2dvID0gY2hhbm5lbFsndHZnLWxvZ28nXTsKICAgICAgICB9CiAgICB9Cn0KZnVuY3Rpb24gc2F2ZVBvcHVwRGF0YShkYXRhVHlwZSwgaWQsIHJlbW92ZSwgb3B0aW9uKSB7CiAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIHRydWUpOwogICAgaWYgKGRhdGFUeXBlID09ICJtYXBwaW5nIikgewogICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgIGNvbnNvbGUubG9nKCJTYXZlIG1hcHBpbmcgZGF0YSIpOwogICAgICAgIGNtZCA9ICJzYXZlRXBnTWFwcGluZyI7CiAgICAgICAgZGF0YVsiZXBnTWFwcGluZyJdID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgICAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgICAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgIGRlbGV0ZSBVTkRPWyJlcGdNYXBwaW5nIl07CiAgICAgICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc29sZS5sb2coIlNhdmUgcG9wdXAgZGF0YSIpOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cC1jdXN0b20iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICB2YXIgc2VsZWN0cyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEFCTEUiKVswXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiU0VMRUNUIik7CiAgICB2YXIgaW5wdXQgPSBuZXcgT2JqZWN0KCk7CiAgICB2YXIgY29uZmlybU1zZzsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBuYW1lOwogICAgICAgIG5hbWUgPSBzZWxlY3RzW2ldLm5hbWU7CiAgICAgICAgdmFyIHZhbHVlID0gc2VsZWN0c1tpXS52YWx1ZTsKICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBwYXJzZUludCh2YWx1ZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgaW5wdXRbbmFtZV0gPSBpbnB1dHNbaV0uY2hlY2tlZDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgY2FzZSAiaGlkZGVuIjoKICAgICAgICAgICAgY2FzZSAicGFzc3dvcmQiOgogICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHBhcnNlSW50KGlucHV0c1tpXS52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gaW5wdXRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGNtZDsKICAgIGlmIChyZW1vdmUgPT0gdHJ1ZSkgewogICAgICAgIGlucHV0WyJkZWxldGUiXSA9IHRydWU7CiAgICB9CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIHVzZXI/IjsKICAgICAgICAgICAgaWYgKGlkID09ICItIikgewogICAgICAgICAgICAgICAgY21kID0gInNhdmVOZXdVc2VyIjsKICAgICAgICAgICAgICAgIGRhdGFbInVzZXJEYXRhIl0gPSBpbnB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNtZCA9ICJzYXZlVXNlckRhdGEiOwogICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICBkW2lkXSA9IGlucHV0OwogICAgICAgICAgICAgICAgZGF0YVsidXNlckRhdGEiXSA9IGQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBwbGF5bGlzdD8iOwogICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFNhdmUKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZUZpbGVzTTNVIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBVcGRhdGUKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBjbWQgPSAidXBkYXRlRmlsZU0zVSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVsiZmlsZXMiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbGVzIl1bZGF0YVR5cGVdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdID0gaW5wdXQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImhkaHIiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIEhESG9tZVJ1biB0dW5lcj8iOwogICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewogICAgICAgICAgICAgICAgLy8gUG9wdXA6IFNhdmUKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICBjbWQgPSAic2F2ZUZpbGVzSERIUiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBQb3B1cDogVXBkYXRlCiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInVwZGF0ZUZpbGVIREhSIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBjb25maXJtTXNnID0gIkRlbGV0ZSB0aGlzIFhNTFRWIGZpbGU/IjsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBTYXZlCiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgY21kID0gInNhdmVGaWxlc1hNTFRWIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIC8vIFBvcHVwOiBVcGRhdGUKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICBjbWQgPSAidXBkYXRlRmlsZVhNTFRWIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhWyJmaWxlcyJdID0gbmV3IE9iamVjdDsKICAgICAgICAgICAgZGF0YVsiZmlsZXMiXVtkYXRhVHlwZV0gPSBuZXcgT2JqZWN0OwogICAgICAgICAgICBkYXRhWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF0gPSBpbnB1dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICAgICAgY29uZmlybU1zZyA9ICJEZWxldGUgdGhpcyBmaWx0ZXI/IjsKICAgICAgICAgICAgY21kID0gInNhdmVGaWx0ZXIiOwogICAgICAgICAgICBkYXRhWyJmaWx0ZXIiXSA9IG5ldyBPYmplY3Q7CiAgICAgICAgICAgIGRhdGFbImZpbHRlciJdW2lkXSA9IGlucHV0OwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhVHlwZSwgaWQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHJlbW92ZSA9PSB0cnVlKSB7CiAgICAgICAgaWYgKCFjb25maXJtKGNvbmZpcm1Nc2cpKSB7CiAgICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKfQpmdW5jdGlvbiBkb25lUG9wdXBEYXRhKGRhdGFUeXBlLCBpZHNTdHIpIHsKICAgIHZhciBpZHMgPSBpZHNTdHIuc3BsaXQoJywnKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAtY3VzdG9tIik7CiAgICB2YXIgaW5wdXRzID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImNoYW5nZWQiKTsKICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgaW5wdXQgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgaW5wdXQgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICBjb25zb2xlLmxvZygiSU5QVVQ6ICIgKyBpbnB1dCk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgICAgIHZhciB2YWx1ZTsKICAgICAgICAgICAgc3dpdGNoIChpbnB1dHNbaV0udGFnTmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAiSU5QVVQiOgogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5wdXRzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0c1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnB1dHNbaV0uY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gaW5wdXRzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlucHV0c1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpbnB1dFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICAgICAgY2FzZSAidHZnLWxvZ28iOgogICAgICAgICAgICAgICAgICAgIC8vKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzJdLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLnNldEF0dHJpYnV0ZSgic3JjIiwgdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWNoYW5uZWwtc3RhcnQiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LW5hbWUiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzNdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWNhdGVnb3J5IjoKICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSAid2hpdGUiOwogICAgICAgICAgICAgICAgICAgIHZhciBjYXRDb2xvclNldHRpbmdzID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJlcGdDYXRlZ29yaWVzQ29sb3JzIl07CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yc19zcGxpdCA9IGNhdENvbG9yU2V0dGluZ3Muc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3JzX3NwbGl0Lmxlbmd0aDsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0c0NvbG9yX3NwbGl0ID0gY29sb3JzX3NwbGl0W2lpXS5zcGxpdCgiOiIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2F0c0NvbG9yX3NwbGl0WzBdID09IHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGNhdHNDb2xvcl9zcGxpdFsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1szXS5maXJzdENoaWxkLnN0eWxlLmJvcmRlckNvbG9yID0gY29sb3I7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2hpbGROb2Rlc1s1XS5maXJzdENoaWxkLmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAieC14bWx0di1maWxlIjoKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gIlRocmVhZGZpbiBEdW1teSIgJiYgdmFsdWUgIT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKHZhbHVlLCAieG1sdHYiLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0WyJ4LWFjdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzZdLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LW1hcHBpbmciOgogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAiLSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbIngtYWN0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIngtYmFja3VwLWNoYW5uZWwiOgogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5jaGlsZE5vZGVzWzddLmZpcnN0Q2hpbGQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJ4LWhpZGUtY2hhbm5lbCI6CiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbN10uZmlyc3RDaGlsZC5pbm5lckhUTUwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3JlYXRlU2VhcmNoT2JqKCk7CiAgICAgICAgICAgIHNlYXJjaEluTWFwcGluZygpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5wdXRbIngtYWN0aXZlIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBjb25zb2xlLmxvZyhpbnB1dFsidHZnLWxvZ28iXSk7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNoaWxkTm9kZXNbMl0uZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInNyYyIsIGlucHV0WyJ0dmctbG9nbyJdKTsKICAgIH0pOwogICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgZmFsc2UpOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNob3dQcmV2aWV3KGVsZW1lbnQpIHsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlTdHJlYW1zQm94Iik7CiAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0gIm5vdFZpc2libGUiOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgdmFyIHN0cmVhbXMgPSBbImFjdGl2ZVN0cmVhbXMiLCAiaW5hY3RpdmVTdHJlYW1zIl07CiAgICBzdHJlYW1zLmZvckVhY2gocHJldmlldyA9PiB7CiAgICAgICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJldmlldyk7CiAgICAgICAgdGFibGUuaW5uZXJIVE1MID0gIiI7CiAgICAgICAgdmFyIG9iaiA9IFNFUlZFUlsiZGF0YSJdWyJTdHJlYW1QcmV2aWV3VUkiXVtwcmV2aWV3XTsKICAgICAgICB2YXIgY2FwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkNBUFRJT04iKTsKICAgICAgICB2YXIgcmVzdWx0ID0gcHJldmlldy5yZXBsYWNlKC8oW0EtWl0pL2csICIgJDEiKTsKICAgICAgICB2YXIgZmluYWxSZXN1bHQgPSByZXN1bHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN1bHQuc2xpY2UoMSk7CiAgICAgICAgY2FwdGlvbi5pbm5lckhUTUwgPSBmaW5hbFJlc3VsdDsKICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChjYXB0aW9uKTsKICAgICAgICB2YXIgdGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUQk9EWSIpOwogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRib2R5KTsKICAgICAgICBvYmouc2xpY2UoMCwgMTAwMCkuZm9yRWFjaChjaGFubmVsID0+IHsKICAgICAgICAgICAgdmFyIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICAgICAgdmFyIHRkS2V5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdmFyIHRkVmFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgdGRLZXkuY2xhc3NOYW1lID0gInRkS2V5IjsKICAgICAgICAgICAgdGRWYWwuY2xhc3NOYW1lID0gInRkVmFsIjsKICAgICAgICAgICAgc3dpdGNoIChwcmV2aWV3KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhY3RpdmVTdHJlYW1zIjoKICAgICAgICAgICAgICAgICAgICB0ZEtleS5pbm5lclRleHQgPSAiQ2hhbm5lbDogKCspIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImluYWN0aXZlU3RyZWFtcyI6CiAgICAgICAgICAgICAgICAgICAgdGRLZXkuaW5uZXJUZXh0ID0gIkNoYW5uZWw6ICgtKSI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGRWYWwuaW5uZXJUZXh0ID0gY2hhbm5lbDsKICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGRLZXkpOwogICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZFZhbCk7CiAgICAgICAgICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgIH0pOwogICAgfSk7CiAgICAvLyBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKQogICAgZGl2LmNsYXNzTmFtZSA9ICJ2aXNpYmxlIjsKICAgIHJldHVybjsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1tZW51X3RzLmpzLm1hcA=="
- webUI["html/img/users.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0zMFQxNzowODozODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjU01MMAAANJSURBVGgF1ZnLaxNRFMYz2rpoFbW+SCsihaJQRMT6rPhAXAq6c+HChSguRFd1oRtd+A/oWhQ3oiiWFB91UbqRqlXXgoIIQhFbQTTQao2/GzLDZEjIPefO7SQHPjJz55zzfd/MZCa5N8h5ilKptJvWp8FekAed4Bv4Cj6Dh2A4CIJZPpszMHEV2MQ0SZdB0DROENMHjoEzQBoFCpZnbgYR58E/qfpE/kv2F2dmBvJ94G9ClHb3SiZGUBuASa3qGnVzjG3RmFmkKYrVHGB7e2zfdbOdBhc1TVyNnNSQNqg5wVURf/FdjRxpIEpzuIOio9JCtRHO2hrINkgJLfPFt6vaCII2WYrSpPVJi1RGuBrmTbxeSibIX5j3CUauAfOo9BXzNH4nMJ5TXREI1gHzqPQVRtc2zCyxJdAaGbclcMj7zi/jOdt6rZFhCH7akijznknqVEY4U78heSAhUuTekNSojFQIChIiYe57TtZrSY2LkecQzUjIBLljglz3VJ4qg+AXSDNGabbWXZ2wA6Qjabqg136hhHK6y60V8o2EGyl8/qHHpKZPGkYeQzyvIa9RM86XvFhjvOGQsxGIp2B50ZDJLuG2XZqnLO5rM3viGh9o0OZJon1bRLxxdHLcns1jJiYOAu2U0D2P0uStMXJdcVU+UdMlZ/NYgaA28ERg5ge5/R4l6VsjrANMWJiZJWeXnqm60vnxW90ul6u8ByaS4zX2i+S+qjGuGkrdSEWFzT1vlhlSC19Gui0UtnNriSfi6vX1ZWRjPcLEeGrzYqkb4SyvQGxvQnC93cF6BzIfx8gpYBsfSdycuei4AAR1ggugCCRh1lbugIF4vwXbhtisjfSDc+ARSOOf4lv6mNWv1VIj1ouQNF9K851gDzArtWbV1uYxS5o4zB+sp+AuKPC+cVv5RXwPuATMmUpreY1Wopgh+ybYKj4dFHWB+8DMwTZTjCHmsJUhEgfAF9DMcQtx9V8dHMyDqWZ2ENM2FL8yVV92kkY56GM5Lc6Z1vY0jbp5EJQnuqPLg4kdLWTCnIxVIJoDi4wweNYcbbGIfuLEjRxqMRNGbvTvsmyE22oZg70taKQn1BxekXw40GKfK0O9oZHsJ8ZCRbLPaI3xP7YzeQoHxWckAAAAAElFTkSuQmCC"
- webUI["html/img/xmltv.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQyMDowNzozMzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Co6j9bsAAAGgSURBVGgF7VqxTsNADL0gYGEon8DOwsbAAH8BYmJn6cYIn8DC3h0+oixISFRiYYCJL0AwMMBAeK5w2rpV6uikxHfYknW98+vds18TK21DWGBlWR7CH+BfcEv2AzLP8HP42gLqkyUATuEp2PWEdQjF9ATs1zF/g29Mrxt+vVcUxR3xWxEktzFPJQmivsv8ZSI9DiQyVnxlIonwn6fpiczXpNuVVXH8O+a3Ys3y9NUyuf/NTTbEHZTjUlGSRzSiPhroUIENwB4AS/vS/susDwDhTpYBER9g7wHh5DWyibV9CiitCZbIafDEYUuJHQI3Nr/9ciWsjK6IFSWYhyvClbAyZqOIlYJG84jq7E1Ot97Zm+TinV1TrWwudk9EI3ebGFekzWprzspGEU2ySWCiOrs/s9dr7M/s9fVJJJrNXcsTsfaJc0WsKZINH+/sf1Jqvl1n1f2ZnStRN/pdq646XcSkIh9dkIg4s+IrE3nCpp8RG7f91ns+cCYR/LD4jcAZB42PN+A7/mcQ8ZxJhBYQvMJwBB/BKTFLVoLMC/wCfgyv7BesTKUC2LKM3wAAAABJRU5ErkJggg=="
- webUI["html/js/configuration_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbl90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NvbmZpZ3VyYXRpb25fdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjO0lBQXBCO1FBQ0UsZUFBVSxHQUFHLFNBQVMsQ0FBQTtJQU94QixDQUFDO0lBTEMsc0JBQXNCLENBQUMsS0FBWTtRQUNqQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVyxTQUFRLGNBQWM7SUFJckMsWUFBWSxHQUFVLEVBQUUsUUFBZTtRQUNyQyxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ2xCLElBQUksT0FBTyxHQUFnQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzdDLElBQUksV0FBa0IsQ0FBQTtRQUV0QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsRCxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNsQixHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpCLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtnQkFDdEIs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"
- webUI["html/js/logs_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nc190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2xvZ3NfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHO0lBRVAsU0FBUyxDQUFDLEtBQVk7UUFFcEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQTtRQUNsQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUE7UUFDaEMsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7UUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUV6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBRUY7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFjO0lBRTlCLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFbkIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9CLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFaEQsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFbEIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFFbkIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUV0QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRW5CLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDO1FBRVQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFFbkIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFFM0MsQ0FBQztJQUVILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVULENBQUM7QUFFRCxTQUFTLFNBQVM7SUFFaEIsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFBO0lBQ3JCLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7SUFDdkIsSUFBSSxNQUFNLEdBQVUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUV0QixDQUFDIn0="
- webUI["html/img/logout.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xM1QxMToxMDoxODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cg27QeEAAANQSURBVGgF7Zk9aBRBGIZzSRSN8YdoCpEkghCCqK1o4g9IsBCCNmIniCAiWAhqI8G02qiIoqCCWggSEcFKEFPYpVAU8QdFUyiKRpRokBjP55OdZDLZvZnZ7N3Ngh887M7sN/O9797t7c5eTc3/8D8DxWKxGS5Ai//oAEYgvB4OwleQaAtAlp8ERG+Bp6Jei/wYQfRy6NfE67vhG0FtA/TBqK7c2A/bCGJ3wpAhOq4ZphGUroEHcYoT+sIygsgmOAu/EwQndYdhBHV1sB8+Jym19Lf6/faVIRuBG+GRRajtcPWMoKwFbtgUOh6vvBGEzYFj8MNRpEtaZY2gaAe8cVHmmXOc/K3QXIZv/+SUFFgJ96AS8ZwiZ6Ab6iZVzGCPiRbCKRiDasQHip6EdD/PDKyFvfAJQgg5kVfB/VoieT0MQojxE1G9UG/7otWS0A7pPkrb7DM/Ppcp+mAAM/bFGEmL4RL8gVDjI8JWOZ0bEjvhSahO0CXXsLMZWZYegREIMV4jaoHTJyNJJLfC7RCdoOm6sxGVyKAeeBegoU6l0XmLiXlwAqp1o4w7j3d1AwW9YdtnNrnQzkOXLddyfAPHv8Ey6ABpd8N88In2QqHwymfARC5mCrAH0i6qGDr9jk3fbNgFz8A1DkwIS7tDpSVwGdLcexIfPZhPHpf2wS+wRX9a/dPGUakLzBdwNgGJRlQBJtgMw5aJ3qr8TLYUmwVHwXXxZTUiwphvHYxDUnzPxIA5CdXa4E5SVa3fyUhkRtYqpSKbNYxpJiq+ncpDJar7GGlknvcl5mqM05BZH4Xl3iOLpLh7j7OR6MScSzAykplg20QIWA0PDSG+RuTdQVy8sNXP9DgK5N4jK9AvkRpfI4sYF/c2836mQl0nQ4zce66AfZFkTMqYl2DGaSMt/CYOHpsuaPco5bLUzUuMGkLHaQ+ovjwZUZrVdpAHRnnw/Bd5MrJCiY62t4x2+E2uBfkfRg95TdSkK8/LJ7JWF83+Nb5Ww0Zf+E3OviwXVMgT8dLwVRsKEd0A+uP8biMlH01MHAYVF/Oh2lCJenkDqpbUN9nPyzU91QnCRbyEPEXn1sQhxMv7tG1T7cW3rK/r44eVtxfxm6gwBh38zJqPJuUtXu3Z/wLwuBaBLgMkKwAAAABJRU5ErkJggg=="
- webUI["html/index.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPCEtLS0NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4gDQogICAgLS0+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8IS0tIGZvbnQtYXdlc29tZSAtLT4NCiAgPGxpbmsNCiAgICByZWw9InN0eWxlc2hlZXQiDQogICAgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzUuMTQuMC9jc3MvYWxsLm1pbi5jc3MiDQogIC8+DQogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPg0KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL2Jhc2UuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQogIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaW1nL3RocmVhZGZpbi5pY28iPg0KDQo8L2hlYWQ+DQoNCjxib2R5IG9ubG9hZD0iamF2YXNjcmlwdDogUGFnZVJlYWR5KCk7Ij4NCg0KICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgPGRpdiBpZD0icG9wdXAtY3VzdG9tIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0ic2VydmVyX2luZm9ybWF0aW9uIj4NCiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPg0KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+DQogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+U2VydmVyIEluZm9ybWF0aW9uPC9oMz4NCiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TZXJ2ZXIgSW5mb3JtYXRpb248L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idmVyc2lvbiIgY2xhc3M9ImZvcm0tbGFiZWwiPlRocmVhZGZpbiBWZXJzaW9uPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0idmVyc2lvbiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImJyYW5jaCIgY2xhc3M9ImZvcm0tbGFiZWwiPlRocmVhZGZpbiBCcmFuY2g8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJicmFuY2giIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlcnJvcnMiIGNsYXNzPSJmb3JtLWxhYmVsIj5FcnJvcnM8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJlcnJvcnMiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ3YXJuaW5ncyIgY2xhc3M9ImZvcm0tbGFiZWwiPldhcm5pbmdzPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0id2FybmluZ3MiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+U3RyZWFtIEluZm9ybWF0aW9uPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRWUiIgY2xhc3M9ImZvcm0tbGFiZWwiPkRWUiBJUDwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9IkRWUiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im0zdS11cmwiIGNsYXNzPSJmb3JtLWxhYmVsIj5NM1UgVVJMIChTcGVjaWZpYyBncm91cHM6IFtodHRwOi8vLi4uP2dyb3VwLXRpdGxlPWZvbyxiYXJdKTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ibTN1LXVybCIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seT4NCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCBjb3B5LWJ0biIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSIjbTN1LXVybCIgZGF0YS1icy10aXRsZT0iQ29weSB0byBjbGlwYm9hcmQiIGRhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIiBkYXRhLWJzLXBsYWNlbWVudD0iYm90dG9tIj48aSBjbGFzcz0iZmFyIGZhLWNsaXBib2FyZCI+PC9pPjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ4ZXBnLXVybCIgY2xhc3M9ImZvcm0tbGFiZWwiPlhNTFRWIFVSTDwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZy11cmwiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHk+DQogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgY29weS1idG4iIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0iI3hlcGctdXJsIiBkYXRhLWJzLXRpdGxlPSJDb3B5IHRvIGNsaXBib2FyZCIgZGF0YS1icy10b2dnbGU9InRvb2x0aXAiIGRhdGEtYnMtcGxhY2VtZW50PSJib3R0b20iPjxpIGNsYXNzPSJmYXIgZmEtY2xpcGJvYXJkIj48L2k+PC9idXR0b24+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0cmVhbXMiIGNsYXNzPSJmb3JtLWxhYmVsIj5GaWx0ZXJlZCBDaGFubmVsczwvbGFiZWw+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9InN0cmVhbXMiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+DQogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ4ZXBnIiBjbGFzcz0iZm9ybS1sYWJlbCI+TWFwcGVkIENoYW5uZWxzPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIj4NCiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4NCiAgICAgIDwvYT4NCiAgICAgIDxidXR0b24gY2xhc3M9Im5hdmJhci10b2dnbGVyIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS1icy10YXJnZXQ9IiNuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWNvbnRyb2xzPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1sYWJlbD0iVG9nZ2xlIG5hdmlnYXRpb24iPg0KICAgICAgICA8c3BhbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXItaWNvbiI+PC9zcGFuPg0KICAgICAgPC9idXR0b24+DQogICAgICA8ZGl2IGNsYXNzPSJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2UiIGlkPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50Ij4NCiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIiBpZD0ibWFpbi1tZW51Ij4NCiAgICAgICAgPC91bD4NCiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIj4NCiAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1saW5rIiBkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiIGRhdGEtYnMtdGFyZ2V0PSIjc2VydmVyX2luZm9ybWF0aW9uIj48aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+IFNlcnZlciBJbmZvcm1hdGlvbjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgPC9uYXY+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbGV4Ij4NCiAgICA8ZGl2IGNsYXNzPSJyb3ciPg0KICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEyIGNvbC1zbS0xMiI+DQogICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJ0YWJsZS1yZXNwb25zaXZlIj48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InJvdyIgaWQ9Im15U3RyZWFtc0JveCI+DQogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1zdGFydCI+DQogICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtZGFyayB0YWJsZS1ib3JkZXJlZCBjYXB0aW9uLXRvcCIgaWQ9ImFjdGl2ZVN0cmVhbXMiPjwvdGFibGU+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC01IGNvbC1zbS0xMiB0YWJsZS1yZXNwb25zaXZlIGZsb2F0LWVuZCI+DQogICAgICAgIDx0YWJsZSBjbGFzcz0idGFibGUgdGFibGUtZGFyayB0YWJsZS1ib3JkZXJlZCBjYXB0aW9uLXRvcCIgaWQ9ImluYWN0aXZlU3RyZWFtcyI+PC90YWJsZT4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbmV0d29ya190cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9tZW51X3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL3NldHRpbmdzX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2xvZ3NfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFzZV90cy5qcyI+PC9zY3JpcHQ+DQo8L2JvZHk+DQoNCjwvaHRtbD4="
- webUI["html/js/classes_ts.js"] = "dmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkgew0KICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHsNCiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fA0KICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fA0KICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07DQogICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpOw0KICAgIH07DQogICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7DQogICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7DQogICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfQ0KICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7DQogICAgfTsNCn0pKCk7DQp2YXIgTWFpbk1lbnUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7DQogICAgZnVuY3Rpb24gTWFpbk1lbnUoKSB7DQogICAgICAgIHRoaXMuRG9jdW1lbnRJRCA9ICJtYWluLW1lbnUiOw0KICAgICAgICB0aGlzLkhUTUxUYWcgPSAiTEkiOw0KICAgIH0NCiAgICBNYWluTWVudS5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKCkgew0KICAgICAgICBjb25zb2xlLmxvZyh0aGlzLkRvY3VtZW50SUQpOw0KICAgIH07DQogICAgcmV0dXJuIE1haW5NZW51Ow0KfSgpKTsNCnZhciBNYWluTWVudUl0ZW0gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7DQogICAgX19leHRlbmRzKE1haW5NZW51SXRlbSwgX3N1cGVyKTsNCiAgICBmdW5jdGlvbiBNYWluTWVudUl0ZW0oKSB7DQogICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsNCiAgICB9DQogICAgTWFpbk1lbnVJdGVtLnByb3RvdHlwZS5jcmVhdGUyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5IVE1MVGFnKTsNCiAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSB0aGlzLlZhbHVlOw0KICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50KTsNCiAgICB9Ow0KICAgIHJldHVybiBNYWluTWVudUl0ZW07DQp9KE1haW5NZW51KSk7DQpmdW5jdGlvbiBwYWdlUmVhZHkoKSB7DQogICAgdmFyIGl0ZW0gPSBuZXcgTWFpbk1lbnVJdGVtKCk7DQogICAgaXRlbS5WYWx1ZSA9ICJUZXN0IjsNCiAgICBpdGVtLmNyZWF0ZTIoKTsNCn0NCg=="
- webUI["html/login.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+DQogICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSIvd2ViIj4NCiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4NCiAgICAgIDwvYT4NCiAgICA8L2Rpdj4NCiAgPC9uYXY+DQogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+DQogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj4NCiAgICAgICAgICAgIDxoMz57ey5sb2dpbi5oZWFkbGluZX19PC9oMz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+e3suYXV0aGVudGljYXRpb25FcnJ9fTwvcD4NCiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4NCiAgICAgICAgICAgICAgPGg1Pnt7LmxvZ2luLnVzZXJuYW1lLnRpdGxlfX06PC9oNT4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJ1c2VybmFtZSIgdHlwZT0idGV4dCIgbmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJVc2VybmFtZSIgdmFsdWU9IiI+DQogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgICAgICAgPGlucHV0IGlkPSJzdWJtaXQiIGNsYXNzPSIiIHR5cGU9InN1Ym1pdCIgb25zdWJtaXQ9ImphdmFzY3JpcHQ6bG9naW4oKTsiIHZhbHVlPSJ7ey5idXR0b24ubG9naW59fSI+DQogICAgICAgICAgICA8L2Zvcm0+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogIDwvZGl2Pg0KDQogIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1BM3JKRDg1Nktvd1NiN2R3bFpkWUVrTzM5R2FnaTd2SXNGMGpyUkFvUW1ES0t0UUJIVXVMWjlBc1N2NGpENFhhIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2F1dGhlbnRpY2F0aW9uX3RzLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCg0KPC9odG1sPg=="
- webUI["html/img/mapping.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0wMlQxMjowODo5NzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpRxQsEAAAJLSURBVGgF7VoxTgMxEMwBHWlAaeABVCEtBcoD+EBewCdCyQsQtLyAPCBvCBSRIBUPCF1ogqBJjlkrezGr6HTrO98lhy1Z9trr2VmvnbMNjUadUhzHLeQB8hw5LS3QOUbubvIf7X3kKXIZibgS51bCZdWgMT6D8nECgArkngagQN0B8dhbkblalVmLIyheCGUthhjuLBq77MihA0xTjHHBEBBOorHLjjghbNOg4Mg2RYO4hIiEiHiaAV5aSwf8hRgjZdHtTTTc2ZFXpZkY+hMx5k3IZYlr7jgudJHp2JElLaF0K1mirYn8nAWgQB3ibM59ERNCA52d6Nghv9isQiUtn0kURe92I9eBcYA6YZxym8dyDuwRuMw82gjQYQbsPdLDdNCROO0US3uEfp3usTZpjf5J2CNtNFwjl7FHvmBnCB5PCQkQoJudJtGvE23sJEFuI39rQArS7dskXK6nlwkAKiB1VxAxLcyUePAH8cQmlbEul4+UM8LkVjPc2ZHcaFUDBEeqjoC0HyIiZ6RqOUSk6ghI+xyRD9mRQTYfIktPylaX16rhzo48KE29QH8kxjxC/hFtZYiGe70OjWVMW7Dx32bA3iO7//iAC8DOPweZFQhH6O+CmkRvW2f28oV8owEoUHdMPPg70rFJZajTkqT7uZ3ObaHEuuHOjnCpsb8vlKUsur2JhruLA94Y5QEOjuSZPR9jQ0R8zGoezNpFhN5RtUm+/bpgaG1u0jd2OSLDTRopbZ/okxcrLUYKvKprbRfHhXr8m5PK/y1V/gWRKLfiNSmxEAAAAABJRU5ErkJggg=="
- webUI["html/img/stream-limit.jpg"] = "/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjItYzAwMCA3OS4xYjY1YTc5YjQsIDIwMjIvMDYvMTMtMjI6MDE6MDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy41IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIyQTc2MDAzNDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIyQTc2MDA0NDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjJBNzYwMDE0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjJBNzYwMDI0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8NDxcbFBAQFBsfFxcXFxcfHhcaGhoaFx4eIyUnJSMeLy8zMy8vQEBAQEBAQEBAQEBAQEBAAREPDxETERUSEhUUERQRFBoUFhYUGiYaGhwaGiYwIx4eHh4jMCsuJycnLis1NTAwNTVAQD9AQEBAQEBAQEBAQED/wAARCAQ4B4ADASIAAhEBAxEB/8QAtAABAAIDAQEBAAAAAAAAAAAAAAYHAwQFAgEIAQEAAwEBAQAAAAAAAAAAAAAAAwQFAQIGEAEAAgEDAQMFCwgIAwcDBQEAAQIDEQQFEiExBkFRcRMHYYGRIjJScrIzNDahsXOzFHQVNcHRQmKCkiOTVBYX4aLC4kNTw9LTJPBjg0RVJREBAAIBAgIIBQQCAgMAAAAAAAECAxEEMRIhUXEiMhMzBUFhUnI0gZGhI0JisRTB0RX/2gAMAwEAAhEDEQA/AK/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxPCHhTgeT4HBvN7tfW7i9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q=="
- webUI["html/js/configuration_ts.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlndXJhdGlvbl90cy5qcy5tYXA="
- webUI["html/js/logs_ts.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzX3RzLmpzLm1hcA=="
- webUI["html/configuration.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHkgb25sb2FkPSJqYXZhc2NyaXB0OiByZWFkeUZvckNvbmZpZ3VyYXRpb24oMCk7Ij4NCg0KICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+DQogIDwvZGl2Pg0KDQogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+DQogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4NCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgPGRpdiBpZD0icG9wdXAtY3VzdG9tIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJpbWdDZW50ZXIiPjwvZGl2Pg0KICA8ZGl2IGlkPSJib3giPg0KDQogICAgPGRpdiBpZD0iaGVhZGxpbmUiPg0KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPkNvbmZpZ3VyYXRpb248L2gxPg0KICAgIDwvZGl2Pg0KICAgIDxwIGlkPSJlcnIiIGNsYXNzPSJlcnJvck1zZyBjZW50ZXIiPjwvcD4NCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPg0KICAgICAgPGlucHV0IGlkPSJuZXh0IiBjbGFzcz0iIiB0eXBlPSJidXR0b24iIG5hbWU9Im5leHQiIHZhbHVlPSJOZXh0IiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBzYXZlV2l6YXJkKCk7Ij4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1BM3JKRDg1Nktvd1NiN2R3bFpkWUVrTzM5R2FnaTd2SXNGMGpyUkFvUW1ES0t0UUJIVXVMWjlBc1N2NGpENFhhIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9jb25maWd1cmF0aW9uX3RzLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbWVudV90cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9zZXR0aW5nc190cy5qcyI+PC9zY3JpcHQ+DQogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9iYXNlX3RzLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCg0KPC9odG1sPg=="
- webUI["html/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCg0KPGhlYWQ+DQogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+DQogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPg0KICA8bGluaw0KICAgIHJlbD0ic3R5bGVzaGVldCINCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyINCiAgLz4NCiAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgaW50ZWdyaXR5PSJzaGEzODQtZ0gyeUlKcUtkTkhQRXEwbjRNcWEvSEdLSWhTa0lIZUw1QXloa1lWOGk1OVU1QVI2Y3NCdkFwSEhObC92STFCeCIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+DQogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4NCiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCjwvaGVhZD4NCg0KPGJvZHk+DQoNCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4NCg0KICA8ZGl2IGlkPSJib3giPg0KDQogICAgPGRpdiBpZD0iaGVhZGxpbmUiPg0KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPnt7LmFjY291bnQuaGVhZGxpbmV9fTwvaDE+DQogICAgPC9kaXY+DQoNCiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+DQoNCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4NCg0KICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4NCg0KICAgICAgICA8aDU+e3suYWNjb3VudC51c2VybmFtZS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPg0KICAgICAgICA8aDU+e3suYWNjb3VudC5wYXNzd29yZC50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiB2YWx1ZT0iIj4NCiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+DQogICAgICAgIDxpbnB1dCBpZD0iY29uZmlybSIgdHlwZT0icGFzc3dvcmQiIG5hbWU9ImNvbmZpcm0iIHBsYWNlaG9sZGVyPSJDb25maXJtIiB2YWx1ZT0iIj4NCg0KICAgICAgPC9mb3JtPg0KDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGlkPSJib3gtZm9vdGVyIj4NCiAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJidXR0b24iIHZhbHVlPSJ7ey5idXR0b24uY3JhZXRlQWNjb3VudH19IiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBsb2dpbigpOyI+DQogICAgPC9kaXY+DQoNCg0KICA8L2Rpdj4NCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvY2xpcGJvYXJkLmpzLzIuMC4xMC9jbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD4NCiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0Pg0KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb25fdHMuanMiPjwvc2NyaXB0Pg0KPC9ib2R5Pg0KDQo8L2h0bWw+"
+ webUI["html/lang/en.json"] = "ewogICJtYWluTWVudSI6IHsKICAgICJpdGVtIjogewogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLAogICAgICAicG1zSUQiOiAiUE1TIElEIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIiLAogICAgICAieG1sdHYiOiAiWE1MVFYiLAogICAgICAibWFwcGluZyI6ICJNYXBwaW5nIiwKICAgICAgInVzZXJzIjogIlVzZXJzIiwKICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwKICAgICAgImxvZyI6ICJMb2ciLAogICAgICAibG9nb3V0IjogIkxvZ291dCIKICAgIH0sCiAgICAiaGVhZGxpbmUiOiB7CiAgICAgICJwbGF5bGlzdCI6ICJMb2NhbCBvciByZW1vdGUgcGxheWxpc3RzIiwKICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLAogICAgICAieG1sdHYiOiAiTG9jYWwgb3IgcmVtb3RlIFhNTFRWIGZpbGVzIiwKICAgICAgIm1hcHBpbmciOiAiTWFwIHBsYXlsaXN0IGNoYW5uZWxzIHRvIEVQRyBjaGFubmVscyIsCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLAogICAgICAic2V0dGluZ3MiOiAiU2V0dGluZ3MiLAogICAgICAibG9nIjogIkxvZyIsCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0IgogICAgfQogIH0sCiAgImNvbmZpcm0iOiB7CiAgICAicmVzdG9yZSI6ICJBbGwgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhvc2UgZnJvbSB0aGUgYmFja3VwLiBTaG91bGQgdGhlIGZpbGVzIGJlIHJlc3RvcmVkPyIKICB9LAogICJhbGVydCI6IHsKICAgICJmaWxlTG9hZGluZ0Vycm9yIjogIkZpbGUgY291bGRuJ3QgYmUgbG9hZGVkIiwKICAgICJpbnZhbGlkQ2hhbm5lbE51bWJlciI6ICJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyIiwKICAgICJtaXNzaW5nSW5wdXQiOiAiTWlzc2luZyBpbnB1dCIKICB9LAogICJidXR0b24iOiB7CiAgICAiYmFjayI6ICJCYWNrIiwKICAgICJiYWNrdXAiOiAiQmFja3VwIiwKICAgICJidWxrRWRpdCI6ICJCdWxrIEVkaXQiLAogICAgImNhbmNlbCI6ICJDYW5jZWwiLAogICAgImRlbGV0ZSI6ICJEZWxldGUiLAogICAgImRvbmUiOiAiRG9uZSIsCiAgICAibG9naW4iOiAiTG9naW4iLAogICAgIm5ldyI6ICJOZXciLAogICAgIm5leHQiOiAiTmV4dCIsCiAgICAicmVzdG9yZSI6ICJSZXN0b3JlIiwKICAgICJzYXZlIjogIlNhdmUiLAogICAgInNlYXJjaCI6ICJTZWFyY2giLAogICAgInVwZGF0ZSI6ICJVcGRhdGUiLAogICAgImNyYWV0ZUFjY291bnQiOiAiQ3JlYXRlIEFjY291bnQiLAogICAgInJlc2V0TG9ncyI6ICJSZXNldCBMb2dzIiwKICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwKICAgICJzb3J0Q2hhbm5lbHNBbHBoYSI6ICJTb3J0IENoYW5uZWxzIEFscGhhYmV0aWNhbGx5IiwKICAgICJzb3J0Q2hhbm5lbE51bWJlcnMiOiAiU29ydCBDaGFubmVscyIKICB9LAogICJmaWx0ZXIiOiB7CiAgICAidGFibGUiOiB7CiAgICAgICJuYW1lIjogIkZpbHRlciBOYW1lIiwKICAgICAgInR5cGUiOiAiRmlsdGVyIFR5cGUiLAogICAgICAiZmlsdGVyIjogIkZpbHRlciIKICAgIH0sCiAgICAiY3VzdG9tIjogIkN1c3RvbSIsCiAgICAiZ3JvdXAiOiAiR3JvdXAiLAogICAgIm5hbWUiOiB7CiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgTmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWx0ZXIgbmFtZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInN0YXJ0aW5nbnVtYmVyIjogewogICAgICAidGl0bGUiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWx0ZXIgU3RhcnRpbmcgTnVtYmVyIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlN0YXJ0aW5nIENoYW5uZWwgTnVtYmVyIHRvIHVzZSBmb3IgdGhpcyBHcm91cCBGaWx0ZXIgKERlZmF1bHQgaXMgMTAwMCkiCiAgICB9LAogICAgImNhdGVnb3J5IjogewogICAgICAidGl0bGUiOiAiRmlsdGVyIENhdGVnb3J5IiwKICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBDYXRlZ29yeSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJGaWx0ZXIgQ2F0ZWdvcnkgc2V0cyBhbGwgY2hhbm5lbHMgaW4gdGhlIGZpbHRlciB0byBhIHNwZWNpZmljIGNhdGVnb3J5IChuZXdzLCBzcG9ydHMsIGV0YykiCiAgICB9LAogICAgImRlc2NyaXB0aW9uIjogewogICAgICAidGl0bGUiOiAiRGVzY3JpcHRpb24iLAogICAgICAicGxhY2Vob2xkZXIiOiAiRGVzY3JpcHRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJ0eXBlIjogewogICAgICAidGl0bGUiOiAiVHlwZSIsCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwKICAgICAgImN1c3RvbUZpbHRlciI6ICJDdXN0b20gRmlsdGVyIgogICAgfSwKICAgICJjYXNlU2Vuc2l0aXZlIjogewogICAgICAidGl0bGUiOiAiQ2FzZSBTZW5zaXRpdmUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZmlsdGVyUnVsZSI6IHsKICAgICAgInRpdGxlIjogIkZpbHRlciBSdWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlNwb3J0IHtIRH0gIXtFUyxJVH0iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJmaWx0ZXJHcm91cCI6IHsKICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTZWxlY3QgYSBNM1UgZ3JvdXAuIChDb3VudGVyKTxicj5DaGFuZ2luZyB0aGUgZ3JvdXAgdGl0bGUgaW4gdGhlIE0zVSBpbnZhbGlkYXRlcyB0aGUgZmlsdGVyLiIKICAgIH0sCiAgICAiaW5jbHVkZSI6IHsKICAgICAgInRpdGxlIjogIkluY2x1ZGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDaGFubmVsIG5hbWUgbXVzdCBpbmNsdWRlLjxicj4oQ29tbWEgc2VwYXJhdGVkKSBDb21tYSBtZWFucyBvciIKICAgIH0sCiAgICAiZXhjbHVkZSI6IHsKICAgICAgInRpdGxlIjogIkV4Y2x1ZGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRVMsSVQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3Qgbm90IGNvbnRhaW4uPGJyPihDb21tYSBzZXBhcmF0ZWQpIENvbW1hIG1lYW5zIG9yIgogICAgfQogIH0sCiAgInBsYXlsaXN0IjogewogICAgInRhYmxlIjogewogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLAogICAgICAidHVuZXIiOiAiVHVuZXIiLAogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsCiAgICAgICJhdmFpbGFiaWxpdHkiOiAiQXZhaWxhYmlsaXR5IiwKICAgICAgInR5cGUiOiAiVHlwZSIsCiAgICAgICJzdHJlYW1zIjogIlN0cmVhbXMiLAogICAgICAiZ3JvdXBUaXRsZSI6ICJncm91cC10aXRsZSIsCiAgICAgICJ0dmdJRCI6ICJ0dmctaWQiLAogICAgICAidW5pcXVlSUQiOiAiVW5pcXVlIElEIgogICAgfSwKICAgICJwbGF5bGlzdFR5cGUiOiB7CiAgICAgICJ0aXRsZSI6ICJQbGF5bGlzdCB0eXBlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInR5cGUiOiB7CiAgICAgICJ0aXRsZSI6ICJUeXBlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgIm5hbWUiOiB7CiAgICAgICJ0aXRsZSI6ICJOYW1lIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlBsYXlsaXN0IG5hbWUiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkRlc2NyaXB0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZmlsZU0zVSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBGaWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIE0zVSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImZpbGVIREhSIjogewogICAgICAidGl0bGUiOiAiSERIb21lUnVuIElQIiwKICAgICAgInBsYWNlaG9sZGVyIjogIklQIGFkZHJlc3MgYW5kIHBvcnQgKDE5Mi4xNjguMS4xMDo1MDA0KSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInR1bmVyIjogewogICAgICAidGl0bGUiOiAiVHVuZXIgLyBTdHJlYW1zIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLiA8YnI+T25seSBhdmFpbGFibGUgd2l0aCBhY3RpdmF0ZWQgYnVmZmVyLjxicj5OZXcgc2V0dGluZ3Mgd2lsbCBvbmx5IGJlIGFwcGxpZWQgYWZ0ZXIgcXVpdHRpbmcgYWxsIHN0cmVhbXMuIgogICAgfQogIH0sCiAgInhtbHR2IjogewogICAgInRhYmxlIjogewogICAgICAiZ3VpZGUiOiAiR3VpZGUiLAogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsCiAgICAgICJhdmFpbGFiaWxpdHkiOiAiQXZhaWxhYmlsaXR5IiwKICAgICAgImNoYW5uZWxzIjogIkNoYW5uZWxzIiwKICAgICAgInByb2dyYW1zIjogIlByb2dyYW1zIgogICAgfSwKICAgICJuYW1lIjogewogICAgICAidGl0bGUiOiAiTmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJHdWlkZSBuYW1lIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZGVzY3JpcHRpb24iOiB7CiAgICAgICJ0aXRsZSI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImZpbGVYTUxUViI6IHsKICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsZSBwYXRoIG9yIFVSTCBvZiB0aGUgWE1MVFYiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfQogIH0sCiAgIm1hcHBpbmciOiB7CiAgICAidGFibGUiOiB7CiAgICAgICJjaE5vIjogIkNoLiBOby4iLAogICAgICAibG9nbyI6ICJMb2dvIiwKICAgICAgImNoYW5uZWxOYW1lIjogIkNoYW5uZWwgTmFtZSIsCiAgICAgICJwbGF5bGlzdCI6ICJQbGF5bGlzdCIsCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwKICAgICAgInhtbHR2RmlsZSI6ICJYTUxUViBGaWxlIiwKICAgICAgInhtbHR2SUQiOiAiWE1MVFYgSUQiCiAgICB9LAogICAgImFjdGl2ZSI6IHsKICAgICAgInRpdGxlIjogIkFjdGl2ZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjaGFubmVsTmFtZSI6IHsKICAgICAgInRpdGxlIjogIkNoYW5uZWwgTmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjaGFubmVsR3JvdXBTdGFydCI6IHsKICAgICAgInRpdGxlIjogIkNoYW5uZWwgR3JvdXAgU3RhcnQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiB7CiAgICAgICJ0aXRsZSI6ICJTb3J0IEFscGhhYmV0aWNhbGx5IiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInNvcnRDaGFubmVscyI6IHsKICAgICAgInRpdGxlIjogIlNvcnQgQ2hhbm5lbHMiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiZGVzY3JpcHRpb24iOiB7CiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIERlc2NyaXB0aW9uIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlVzZWQgYnkgdGhlIER1bW15IGFzIGFuIFhNTCBkZXNjcmlwdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInVwZGF0ZUNoYW5uZWxOYW1lIjogewogICAgICAidGl0bGUiOiAiVXBkYXRlIENoYW5uZWwgTmFtZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJjaGFubmVsTG9nbyI6IHsKICAgICAgInRpdGxlIjogIkxvZ28gVVJMIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInVwZGF0ZUNoYW5uZWxMb2dvIjogewogICAgICAidGl0bGUiOiAiVXBkYXRlIENoYW5uZWwgTG9nbyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJlcGdDYXRlZ29yeSI6IHsKICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yeSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJtM3VHcm91cFRpdGxlIjogewogICAgICAidGl0bGUiOiAiR3JvdXAgVGl0bGUgKHRocmVhZGZpbi5tM3UpIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInhtbHR2RmlsZSI6IHsKICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAieG1sdHZDaGFubmVsIjogewogICAgICAidGl0bGUiOiAiWE1MVFYgQ2hhbm5lbCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJwcHZleHRyYSI6IHsKICAgICAgInRpdGxlIjogIlBQViBFeHRyYSBUaXRsZSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyB3aWxsIGFkZCBjdXN0b20gdGV4dCB0byB0aGUgUHJvZ3JhbW1lIGRhdGEiCiAgICB9LAogICAgImJhY2t1cENoYW5uZWwxIjogewogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJiYWNrdXBDaGFubmVsMiI6IHsKICAgICAgInRpdGxlIjogIkJhY2t1cCBDaGFubmVsIDIiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAiYmFja3VwQ2hhbm5lbDMiOiB7CiAgICAgICJ0aXRsZSI6ICJCYWNrdXAgQ2hhbm5lbCAzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImhpZGVDaGFubmVsIjogewogICAgICAidGl0bGUiOiAiSGlkZSBCYWNrdXAgQ2hhbm5lbCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfQogIH0sCiAgInVzZXJzIjogewogICAgInRhYmxlIjogewogICAgICAidXNlcm5hbWUiOiAiVXNlcm5hbWUiLAogICAgICAicGFzc3dvcmQiOiAiUGFzc3dvcmQiLAogICAgICAid2ViIjogIldFQiIsCiAgICAgICJwbXMiOiAiUE1TIiwKICAgICAgIm0zdSI6ICJNM1UiLAogICAgICAieG1sIjogIlhNTCIsCiAgICAgICJhcGkiOiAiQVBJIgogICAgfSwKICAgICJ1c2VybmFtZSI6IHsKICAgICAgInRpdGxlIjogIlVzZXJuYW1lIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAicGFzc3dvcmQiOiB7CiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImNvbmZpcm0iOiB7CiAgICAgICJ0aXRsZSI6ICJDb25maXJtIiwKICAgICAgInBsYWNlaG9sZGVyIjogIlBhc3N3b3JkIGNvbmZpcm0iLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJ3ZWIiOiB7CiAgICAgICJ0aXRsZSI6ICJXZWIgQWNjZXNzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgInBtcyI6IHsKICAgICAgInRpdGxlIjogIlBNUyBBY2Nlc3MiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0sCiAgICAibTN1IjogewogICAgICAidGl0bGUiOiAiTTNVIEFjY2VzcyIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiIgogICAgfSwKICAgICJ4bWwiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUwgQWNjZXNzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiCiAgICB9LAogICAgImFwaSI6IHsKICAgICAgInRpdGxlIjogIkFQSSBBY2Nlc3MiLAogICAgICAicGxhY2Vob2xkZXIiOiAiIiwKICAgICAgImRlc2NyaXB0aW9uIjogIiIKICAgIH0KICB9LAogICJzZXR0aW5ncyI6IHsKICAgICJjYXRlZ29yeSI6IHsKICAgICAgImdlbmVyYWwiOiAiR2VuZXJhbCIsCiAgICAgICJmaWxlcyI6ICJGaWxlcyIsCiAgICAgICJuZXR3b3JrIjogIk5ldHdvcmsiLAogICAgICAic3RyZWFtaW5nIjogIlN0cmVhbWluZyIsCiAgICAgICJiYWNrdXAiOiAiQmFja3VwIiwKICAgICAgImF1dGhlbnRpY2F0aW9uIjogIkF1dGhlbnRpY2F0aW9uIgogICAgfSwKICAgICJ1cGRhdGUiOiB7CiAgICAgICJ0aXRsZSI6ICJTY2hlZHVsZSBmb3IgdXBkYXRpbmcgKFBsYXlsaXN0LCBYTUxUViwgQmFja3VwKSIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIwMDAwLDEwMDAsMjAwMCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaW1lIGluIDI0IGhvdXIgZm9ybWF0ICgwODAwID0gODowMCBhbSkuIE1vcmUgdGltZXMgY2FuIGJlIGVudGVyZWQgY29tbWEgc2VwYXJhdGVkLiBMZWF2ZSB0aGlzIGZpZWxkIGVtcHR5IGlmIG5vIHVwZGF0ZXMgYXJlIHRvIGJlIGNhcnJpZWQgb3V0LiIKICAgIH0sCiAgICAiYXBpIjogewogICAgICAidGl0bGUiOiAiQVBJIEludGVyZmFjZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL1RocmVhZGZpbi9UaHJlYWRmaW4tRG9jdW1lbnRhdGlvbi9ibG9iL21hc3Rlci9lbi9jb25maWd1cmF0aW9uLm1kI2FwaSc+aGVyZTwvYT4iCiAgICB9LAogICAgInNzZHAiOiB7CiAgICAgICJ0aXRsZSI6ICJTU0RQIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlNTRFAgaXMgYSBuZXR3b3JrIHByb3RvY29sIGZvciBzZXJ2aWNlIGRpc2NvdmVyeS4gSXQgaXMgdXNlZCBmb3IgdGhlIGF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgVGhyZWFkZmluIGluIHRoZSBuZXR3b3JrLiIKICAgIH0sCiAgICAiZHVtbXkiOiB7CiAgICAgICJ0aXRsZSI6ICJFbmFibGUgRGVmYXVsdCBEdW1teSBEYXRhIiwKICAgICAgImRlc2NyaXB0aW9uIjogIldoZW4gZW5hYmxlZCwgdGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgbWFwIGluYWN0aXZlIGNoYW5uZWxzIHRvIHRoZSBkdW1teSBkYXRhIGNoYW5uZWwgYmVsb3cuIFVzZSB0aGlzIHRvIGtlZXAgTGl2ZSBFdmVudCBjaGFubmVscyBhY3RpdmUuIgogICAgfSwKICAgICJkdW1teUNoYW5uZWwiOiB7CiAgICAgICJ0aXRsZSI6ICJEdW1teSBEYXRhIENoYW5uZWwiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iCiAgICB9LAogICAgImlnbm9yZUZpbHRlcnMiOiB7CiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBjaGVja2VkLCBmaWx0ZXJpbmcgaXMgY29tcGxldGVseSBpZ25vcmVkLiIKICAgIH0sCiAgICAiZXBnU291cmNlIjogewogICAgICAidGl0bGUiOiAiRVBHIFNvdXJjZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQTVM6PGJyPi0gVXNlIEVQRyBkYXRhIGZyb20gUGxleCwgRW1ieSBvciBKZWxseWZpbiA8YnI+PGJyPlhFUEc6PGJyPi0gVXNlIG9mIG9uZSBvciBtb3JlIFhNTFRWIGZpbGVzPGJyPi0gQ2hhbm5lbCBtYW5hZ2VtZW50PGJyPi0gTTNVIC8gWE1MVFYgZXhwb3J0IChIVFRQIGxpbmsgZm9yIElQVFYgYXBwcykiCiAgICB9LAogICAgInR1bmVyIjogewogICAgICAidGl0bGUiOiAiTnVtYmVyIG9mIFR1bmVycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiIKICAgIH0sCiAgICAiZmlsZXNVcGRhdGUiOiB7CiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlVwZGF0ZXMgYWxsIHBsYXlsaXN0cywgdHVuZXIgYW5kIFhNTFRWIGZpbGVzIGF0IHN0YXJ0dXAuIgogICAgfSwKICAgICJjYWNoZUltYWdlcyI6IHsKICAgICAgInRpdGxlIjogIkltYWdlIENhY2hpbmciLAogICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBvcHRpb24gd2lsbCByZXdyaXRlIHRoZSBtM3UgZmlsZSB0byBsb2NhbCBpbWFnZSBjYWNoZSBmb3IgdHYgbG9nb3MuPGJyPkFsbCBpbWFnZXMgZnJvbSB0aGUgWE1MVFYgZmlsZSBhcmUgY2FjaGVkLCBhbGxvd2luZyBmYXN0ZXIgcmVuZGVyaW5nIG9mIHRoZSBncmlkIGluIHRoZSBjbGllbnQuPGJyPkRvd25sb2FkaW5nIHRoZSBpbWFnZXMgbWF5IHRha2UgYSB3aGlsZSBhbmQgd2lsbCBiZSBkb25lIGluIHRoZSBiYWNrZ3JvdW5kLjxicj4iCiAgICB9LAogICAgInJlcGxhY2VFbXB0eUltYWdlcyI6IHsKICAgICAgInRpdGxlIjogIlJlcGxhY2UgbWlzc2luZyBwcm9ncmFtIGltYWdlcyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0aGUgcG9zdGVyIGluIHRoZSBYTUxUViBwcm9ncmFtIGlzIG1pc3NpbmcsIHRoZSBjaGFubmVsIGxvZ28gd2lsbCBiZSB1c2VkLiIKICAgIH0sCiAgICAicmVwbGFjZUNoYW5uZWxUaXRsZSI6IHsKICAgICAgInRpdGxlIjogIlJlcGxhY2UgUFBWIGNoYW5uZWxzIHRpdGxlL2Rlc2MiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVXNlIHRoaXMgaWYgeW91ciBwcm92aWRlciBtYXBzIHRoZSBQUFYgZXZlbnQgbmFtZSB0byB0aGUgY2hhbm5lbCBuYW1lIgogICAgfSwKICAgICJUaHJlYWRmaW5BdXRvVXBkYXRlIjogewogICAgICAidGl0bGUiOiAiQXV0b21hdGljIHVwZGF0ZSBvZiBUaHJlYWRmaW4iLAogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgYSBuZXcgdmVyc2lvbiBvZiBUaHJlYWRmaW4gaXMgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLiBUaGUgdXBkYXRlcyBhcmUgZG93bmxvYWRlZCBmcm9tIEdpdEh1Yi4iCiAgICB9LAogICAgInN0cmVhbUJ1ZmZlcmluZyI6IHsKICAgICAgInRpdGxlIjogIlN0cmVhbSBCdWZmZXIiLAogICAgICAiZGVzY3JpcHRpb24iOiAiRnVuY3Rpb25zIG9mIHRoZSBidWZmZXI6PGJyPi0gVGhlIHN0cmVhbSBpcyBwYXNzZWQgZnJvbSBGRm1wZWcgb3IgVkxDIHRvIFBsZXgsIEVtYnksIEplbGx5ZmluIG9yIE0zVSBQbGF5ZXI8YnI+LSBTbWFsbCBqZXJraW5nIG9mIHRoZSBzdHJlYW1zIGNhbiBiZSBjb21wZW5zYXRlZDxicj4tIEhMUyAvIE0zVTggc3VwcG9ydDxicj4tIFJUUCAvIFJUUFMgc3VwcG9ydDxicj4tIFJlLXN0cmVhbWluZzxicj4tIFNlcGFyYXRlIHR1bmVyIGxpbWl0IGZvciBlYWNoIHBsYXlsaXN0IiwKICAgICAgImluZm9fZmFsc2UiOiAiTm8gQnVmZmVyIChDbGllbnQgY29ubmVjdHMgZGlyZWN0bHkgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIpIiwKICAgICAgImluZm9fZmZtcGVnIjogIkZGbXBlZyBjb25uZWN0cyB0byB0aGUgc3RyZWFtaW5nIHNlcnZlciIsCiAgICAgICJpbmZvX3ZsYyI6ICJWTEMgY29ubmVjdHMgdG8gdGhlIHN0cmVhbWluZyBzZXJ2ZXIiCiAgICB9LAogICAgInVkcHh5IjogewogICAgICAidGl0bGUiOiAiVURQeHkgYWRkcmVzcyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgYWRkcmVzcyBvZiB5b3VyIFVEUHh5IHNlcnZlci4gSWYgc2V0LCBhbmQgdGhlIGNoYW5uZWwgVVJMcyBpbiB0aGUgbTN1IGlzIG11bHRpY2FzdCwgVGhyZWFkZmluIHdpbGwgcmV3cml0ZSBpdCBzbyB0aGF0IGl0IGlzIGFjY2Vzc2VkIHZpYSB0aGUgVURQeHkgc2VydmljZS4iLAogICAgICAicGxhY2Vob2xkZXIiOiAiaG9zdDpwb3J0IgogICAgfSwKICAgICJmZm1wZWdQYXRoIjogewogICAgICAidGl0bGUiOiAiRkZtcGVnIEJpbmFyeSBQYXRoIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gRkZtcGVnIGJpbmFyeS4iLAogICAgICAicGxhY2Vob2xkZXIiOiAiL3BhdGgvdG8vZmZtcGVnIgogICAgfSwKICAgICJmZm1wZWdPcHRpb25zIjogewogICAgICAidGl0bGUiOiAiRkZtcGVnIE9wdGlvbnMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkxlYXZlIGJsYW5rIHRvIHNldCBkZWZhdWx0IHNldHRpbmdzIgogICAgfSwKICAgICJ2bGNQYXRoIjogewogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBCaW5hcnkgUGF0aCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIFZMQyAvIENWTEMgYmluYXJ5LiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9jdmxjIgogICAgfSwKICAgICJ2bGNPcHRpb25zIjogewogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBPcHRpb25zIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlZMQyAvIENWTEMgb3B0aW9ucy48YnI+T25seSBjaGFuZ2UgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLjxicj5MZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncy4iLAogICAgICAicGxhY2Vob2xkZXIiOiAiTGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MiCiAgICB9LAogICAgImJ1ZmZlclNpemUiOiB7CiAgICAgICJ0aXRsZSI6ICJCdWZmZXIgU2l6ZSIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgc2l6ZSBpbiBNQi48YnI+TTNVODogSWYgdGhlIFRTIHNlZ21lbnQgc21hbGxlciB0aGVuIHRoZSBidWZmZXIgc2l6ZSwgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkLiIKICAgIH0sCiAgICAic3RvcmVCdWZmZXJJblJBTSI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJTdG9yZSBidWZmZXIgaW4gUkFNIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdyaXRlIGJ1ZmZlciB0byBSQU0gaW5zdGVhZCBvZiB3cml0aW5nIHRvIGRpc2siCiAgICB9LAogICAgIm9taXRQb3J0cyI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJPbWl0IHBvcnQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQnkgYWN0aXZhdGluZyB0aGlzIGNoZWNrYm94IHRoZSBtM3UgZmlsZSB3aWxsIG5vdCBjb250YWluIHRoZSBwb3J0IGluIHRoZSB1cmwiCiAgICB9LAogICAgImxpc3RlbmluZ0lwIiA6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJMaXN0ZW5pbmcgSVBzIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkVudGVyIHRoZSBsaXN0ZW5pbmcgSVBzIHNlcHJhdGVkIGJ5IGFuICc7JyBmb3IgZXhhbXBsZTogMTI3LjAuMC4xOzE5Mi4xNjguMi4xIgogICAgfSwKICAgICJmb3JjZUh0dHBzIjoKICAgIHsKICAgICAgInRpdGxlIjogIkZvcmNlIEhUVFBTIHRvIFVwc3RyZWFtIHNlcnZlciIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaGVuIHRoaXMgY2hlY2tib3ggaXMgYWN0aXZhdGVkIFRocmVhZGZpbiB3aWxsIGJlIGZvcmNlZCB0byB1c2UgSFRUUFMgY29ubmVjdGlvbiB0byB1cHN0cmVhbSBzZXJ2ZXIgPGJyPlRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGFzIHRoZSBnaXZlbiB1cmxzIHdpbGwgYmUgcmV3cml0dGVuIHRvIGh0dHBzIHVybHMsIHRoaXMgY2FuIGxlYWQgdG8gNDA0IEhUVFAgRXJyb3IgQ29kZXM8L2JyPiIKICAgIH0sCiAgICAidXNlSHR0cHMiOgogICAgewogICAgICAidGl0bGUiOiAiVXNlIEhUVFBTIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkVuYWJsZSBIVFRQUyBwcm90b2NvbCBmb3IgVGhyZWFkZmluLCBIVFRQUyBQb3J0IG5lZWRzIHRvIGJlIHNldCwgb3RoZXJ3aXNlIHRoZSA0NDMgd2lsbCBiZSB1c2VkISIKICAgIH0sCiAgICAiZm9yY2VDbGllbnRIdHRwcyI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJGb3JjZSBjbGllbnQgdG8gdXNlIGh0dHBzIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkFsbCBVUkxzIHRvIHRoaXMgdGhyZWFkZmluIGluc3RhbmNlIHdpbGwgYmUgc3RhcnRpbmcgd2l0aCBodHRwcyIKICAgIH0sCiAgICAidGhyZWFkZmluRG9tYWluIjoKICAgIHsKICAgICAgInRpdGxlIjogIlRocmVhZGZpbiBEb21haW4iLAogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBub3QgZW1wdHksIHRoaXMgd2lsbCByZXdyaXRlIHRoZSBVUkxzIGluIHRoZSBuZXcgbTN1IHRvIGEgRlFETi48YnI+RG8gTk9UIGluY2x1ZGUgaHR0cCAoZXg6IHNvbWVkb21haW4uY29tKTwvYnI+IgogICAgfSwKICAgICJlbmFibGVOb25Bc2NpaSI6CiAgICB7CiAgICAgICJ0aXRsZSI6ICJFbmFibGUgTm9uLUFTQ0lJIiwKICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiCiAgICB9LAogICAgImVwZ0NhdGVnb3JpZXMiOgogICAgewogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3JpZXMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcmllcy4gVGhlIGZvcm1hdCBpcyBrZXk6dmFsdWV8a2V5OnZhbHVlLCBzbyBOZXdzOm5ld3N8U3BvcnRzOnNwb3J0c3xNb3ZpZXM6bW92aWVzIgogICAgfSwKICAgICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgIHsKICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yeSBjb2xvcnMuIFRoZSBmb3JtYXQgaXMgdmFsdWU6Y29sb3J8dmFsdWU6Y29sb3IsIHNvIG5ld3M6dG9tYXRvfHNwb3J0czp5ZWxsb3dncmVlbnxtb3ZpZXM6cm95YWxibHVlIgogICAgfSwKICAgICJidWZmZXJUaW1lb3V0IjogewogICAgICAidGl0bGUiOiAiVGltZW91dCBmb3IgbmV3IGNsaWVudCBjb25uZWN0aW9ucyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgVGhyZWFkZmluIGJ1ZmZlciB3YWl0cyB1bnRpbCBuZXcgY2xpZW50IGNvbm5lY3Rpb25zIGFyZSBlc3RhYmxpc2hlZC4gSGVscGZ1bCBmb3IgZmFzdCBjaGFubmVsIHN3aXRjaGluZy4gVmFsdWUgaW4gbWlsbGlzZWNvbmRzLiIsCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiCiAgICB9LAogICAgInVzZXJBZ2VudCI6IHsKICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLAogICAgICAiZGVzY3JpcHRpb24iOiAiVXNlciBBZ2VudCBmb3IgSFRUUCByZXF1ZXN0cy4gRm9yIGV2ZXJ5IEhUVFAgY29ubmVjdGlvbiwgdGhpcyB2YWx1ZSBpcyB1c2VkIGZvciB0aGUgdXNlciBhZ2VudC4gU2hvdWxkIG9ubHkgYmUgY2hhbmdlZCBpZiBUaHJlYWRmaW4gaXMgYmxvY2tlZC4iLAogICAgICAicGxhY2Vob2xkZXIiOiAiVGhyZWFkZmluIgogICAgfSwKICAgICJiYWNrdXBQYXRoIjogewogICAgICAidGl0bGUiOiAiTG9jYXRpb24gZm9yIGF1dG9tYXRpYyBiYWNrdXBzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCZWZvcmUgYW55IHVwZGF0ZSBvZiB0aGUgcHJvdmlkZXIgZGF0YSBieSB0aGUgc2NoZWR1bGUsIFRocmVhZGZpbiBjcmVhdGVzIGEgYmFja3VwLiBUaGUgcGF0aCBmb3IgdGhlIGF1dG9tYXRpYyBiYWNrdXBzIGNhbiBiZSBjaGFuZ2VkLiBUaHJlYWRmaW4gcmVxdWlyZXMgd3JpdGUgcGVybWlzc2lvbiBmb3IgdGhpcyBmb2xkZXIuIgogICAgfSwKICAgICJ0ZW1wUGF0aCI6IHsKICAgICAgInRpdGxlIjogIkxvY2F0aW9uIGZvciB0aGUgdGVtcG9yYXJ5IGZpbGVzIiwKICAgICAgInBsYWNlaG9sZGVyIjogIi90bXAvdGhyZWFkZmluLyIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iCiAgICB9LAogICAgImJhY2t1cEtlZXAiOiB7CiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwKICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBiYWNrdXBzIHRvIGtlZXAuIE9sZGVyIGJhY2t1cHMgYXJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4iCiAgICB9LAogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogewogICAgICAidGl0bGUiOiAiV0VCIEF1dGhlbnRpY2F0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkFjY2VzcyB0byB0aGUgd2ViIGludGVyZmFjZSBvbmx5IHBvc3NpYmxlIHdpdGggY3JlZGVudGlhbHMuIgogICAgfSwKICAgICJhdXRoZW50aWNhdGlvblBNUyI6IHsKICAgICAgInRpdGxlIjogIlBNUyBBdXRoZW50aWNhdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIgogICAgfSwKICAgICJhdXRoZW50aWNhdGlvbk0zVSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLm0zdSBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uLiIKICAgIH0sCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUwgQXV0aGVudGljYXRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi54bWwgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbiIKICAgIH0sCiAgICAiYXV0aGVudGljYXRpb25BUEkiOiB7CiAgICAgICJ0aXRsZSI6ICJBUEkgQXV0aGVudGljYXRpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iCiAgICB9CiAgfSwKICAid2l6YXJkIjogewogICAgImVwZ1NvdXJjZSI6IHsKICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLAogICAgICAiZGVzY3JpcHRpb24iOiAiUE1TOjxicj4tIFVzZSBFUEcgZGF0YSBmcm9tIFBsZXgsIEVtYnkgb3IgSmVsbHlmaW4gPGJyPjxicj5YRVBHOjxicj4tIFVzZSBvZiBvbmUgb3IgbW9yZSBYTUxUViBmaWxlczxicj4tIENoYW5uZWwgbWFuYWdlbWVudDxicj4tIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIgogICAgfSwKICAgICJ0dW5lciI6IHsKICAgICAgInRpdGxlIjogIk51bWJlciBvZiB0dW5lcnMiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG9mIHBhcmFsbGVsIGNvbm5lY3Rpb25zIHRoYXQgY2FuIGJlIGVzdGFibGlzaGVkIHRvIHRoZSBwcm92aWRlci48YnI+QXZhaWxhYmxlIGZvcjogUGxleCwgRW1ieSwgSmVsbHlmaW4sIE0zVSAod2l0aCBhY3RpdmUgYnVmZmVyKS48YnI+QWZ0ZXIgYSBjaGFuZ2UsIFRocmVhZGZpbiBtdXN0IGJlIGRlbGV0ZSBpbiB0aGUgUGxleCAvIEVtYnkgLyBKZWxseWZpbiBEVlIgc2V0dGluZ3MgYW5kIHNldCB1cCBhZ2Fpbi4iCiAgICB9LAogICAgIm0zdSI6IHsKICAgICAgInRpdGxlIjogIk0zVSBQbGF5bGlzdCIsCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLAogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIHBsYXlsaXN0cyIKICAgIH0sCiAgICAieG1sdHYiOiB7CiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIFhNTFRWIiwKICAgICAgImRlc2NyaXB0aW9uIjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlIgogICAgfQogIH0sCiAgImxvZ2luIjogewogICAgImZhaWxlZCI6ICJVc2VyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsCiAgICAiaGVhZGxpbmUiOiAiTG9naW4iLAogICAgInVzZXJuYW1lIjogewogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiCiAgICB9CiAgfSwKICAiYWNjb3VudCI6IHsKICAgICJmYWlsZWQiOiAiUGFzc3dvcmQgZG9lcyBub3QgbWF0Y2giLAogICAgImhlYWRsaW5lIjogIkNyZWF0ZSB1c2VyIGFjY291bnQiLAogICAgInVzZXJuYW1lIjogewogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLAogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiCiAgICB9LAogICAgInBhc3N3b3JkIjogewogICAgICAidGl0bGUiOiAiUGFzc3dvcmQiLAogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiCiAgICB9LAogICAgImNvbmZpcm0iOiB7CiAgICAgICJ0aXRsZSI6ICJDb25maXJtIiwKICAgICAgInBsYWNlaG9sZGVyIjogIkNvbmZpcm0iCiAgICB9CiAgfQp9"
webUI["html/img/logo_w_600x200.png"] = "iVBORw0KGgoAAAANSUhEUgAAAlgAAADICAYAAAA0n5+2AAAKjElEQVR4nO3dsW4juR0H4NngXkBVmgA56LoUabTdtd7ySm+AuJcfwfsCCexHsHo3qzLlqkuRZgWkSJMAVpEmSBM9wgYCSIDHG0kznBlJI38fYMDJWqO/qPHxZ5IiKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADegHfeZMbs7u7ukqv/UlXVTVVVy6qqPl5APYzfc1VV86qq1lVVfaiqatvxFd1WVTULX9EmXH/Zw/VP6uXlZUzlcuW+8wbDIG7CVxU6sd33K01NB9MQrqoQiHbfPxVebvf4z+Ga+8x7CnHwJglYjF3saA51FEPYhM5t4w7iRPq6x+dhJOyYOLLlDwMoIGAxdsf+Ch/SrvN57w5iRHa/K49ZuavwtQn/HqcN18IVlBOwGLvJGes/53NDiYfsvv1UM814bNpxGkbAbsL04e4aC+8G/JyAxdh9qOk0mrhJfmYb/lpvY9th/Qucy23yvOvCe/gx+f2ZhLA1ugXxMDQBi7FbF35C71vyffxEFlyzWfaHyLLwtdb9MWOtFmR+pUEA3oQ8GLUdtY3qRqpKrwVXS8ACoI2nJFDtwta96UH4JVOEALSx9ulZOM4IFgBAzwQsAICeCVgAAD0TsOD8ZmEvr4dwQPRj+P62p81MJ9m+X3XiDt+vYQuL+PWa7Z3U1Dzssv+/7Hrxms/JuXpDmYR2PFbHodc3Ddfo47SAyZF2+Zps4Hnp5uE1vLZomyb34Szch19r2udb+P0o2fcOTu6dJmfM7u7uSqtP98FaDbAP1k3oDKIPNfsEzRt23osO5x5OQmc1Tfb72mb/HsPdIU3/W/HQsgOMG7Yuevwk2iRp26Z1bMKO5PneUGmA+KHDe9C2nlVol/Seye+pul3Yo8cQVvI60v9vfaDNj306MG2XRfjZQ47dhzehfZqGy3jf/Oz1v7y8NHw4DM+nCOH0Zi3PUJyHUZaSI0lmyfPkh/dOQx15R5xrEnyaXis3CWFgHjaM7bqfUtu2jWL9i9DO29DZp9e5Ldj5vLSem/D1FOpp+9hjgblq8F5tDjz3dM/3h55r33342LDeVLxvpg3CHZyFgAWnNQ/TQLl8dCv/S36SPK6Pc9/iiEIcUdmE6y6zQ38nDXb8noWRlXx0Zptcbx3+fRp+/ib7+Wm4Rpdz7eah0z1WR5XUcpsFjXn4332MaDZtl0P1xFGvNiGiZJStztB7W01qpmjbtE0V3q+NY6u4RAIWnE4erlZJqKlTN4X4GB7XtRNNO/66qaamnVZdiNgk0377TEKHmQai2OFuCo5duakJrk0OIn5K1p/Fjn4WrtUlyNa1S2k9ca1a06NtNiEg5mFkmq17Wxy5j4YOLWm4anLPPCXvc/47sewxWEIvBCw4jbh4t0rWtxzrMGP4+pJ0lnFqpOT8xeghud59hyAxCdNfaYhIp9gO2SavLx/F+BzWOzUdQYl1pFahjZpcYxN+Ng3AJQv703rycFW37qhJPY/JGq42C7tXe0ZF04C1POP5gel6q2WL3eBXYZPTLzUjfaYKuSg+RQinEcNV3AW76WjEtqZjvu3wqbZpUkuXcFXVjK4tCo5N2YYwkdYx2TONus9zTchrGmZS+WLt0pCVT1PGUFBSTzpV2SX0XZoYrhYtgnC0rQlT19Q2XAkBC04nhqW2UxnbmsXGpR1KHMFY9DAFli5MXnUcQbjPRlNuG36i7CZri3XBovDUouPj81GiTcfRxq6v55J1uWfWNaF8DNtb8IYIWHA6XQ7FzUe8SjuT2Z7A1la+h1Uf0zMloxL5p8+aTE8ek2+P0EZdu5yznkvW9Z7J26TtJ1hhUNZgMWq/+e33Yyl/3WJasM42dCgxWHXpTJ46dvqTloulm4qfZIzXvj3SCU+zoFm37qjUU0GInWSh8Nz1XLI+FqXnbdvHZrDQGwGLUfvpD38cS/ldwlW0TjrZLjtZd93mIR9Z6mPbiGiVBKw47bMvpAxdx7plkL20ei5Z1/3Oqpo/EqZPf/7TlTQP10DAYtR+/P3vxlL+EB3KrOC6yx6mrNJOftPTa4vya80OBKy0jm1PITa1bBlo8p89dz2XrM97Bi6SgMW4bf/zlt/AklGsPjq2vJNvuwt3G4deY37sS9/aXjOtZ4g1U0IJjIiAxbj9U5/TUt8BK932YQiHRmzSNTdDBJq21xw68F3jQne4WgIW4/b3v3oDr9tYd+ce+pgZ4MIJWIzbP/7mDTyv9YBh4tBhwwAXTcBi3P79L2/geS0dtAvwSzYaBQDomYAFdHHOzR3T9VlDbF/Q9prpVOkQ9dhIE0ZEwALaSj/Nds59mS4tYKWfHByiHmftwYgIWEBbeZA418hKGvSmA4SattfL6+m7XZy1ByMiYAFt5Xs8NTmUeQj5vlB91pGft9hEXk/bxx+r51ztDBQQsIC28oN6HzqejVhqndUx77GOknA0dD3naGOgkIAFlEgPMt51/M89tuJNCG1NptjSLSImPR3bM+1wnUurBzgTAQsoschGa257mhLbhasv4fidJqEtr+OhYx27UPS5w2hR3/VUHesBzkTAAkrstiS4zx733HGk5TaEiajpIvG6OkpCTRyJi4vJS3eoH6qesR4bBG+SgAWUWtUcZfMYQlKbT9DFqbR0pGYXbj42fPyqZjf5tmFvFkbO4kLybYdjevqoZxrqicHMsUEwMgIW0MVTth6rCiHlNYSKQ598i2uLXkMwi3bh5kPNpxUP+VRTx2O49qEF4rNQ59ds5OpDxxGjQ/UcWl8W63nN6vnoAGkYF2cRAl3dhzD0mAWZeTICkx8KPdsTetbJ9dqKU3PpdNw0BJbnEJjS0FS3cWca7rpu7HkfrpeOXE1DOz02rGcTwlUf9QAnJGDxVm2vYOHwJa3JWYSpsec9QaDJJplx1KfLSM19Ukf+/h7b/HMVHh/bNW/fkro+JeEzf+5j9SyTkNZXPX1Jf3/OeR+ue1gzB4MwRchb9Sn8B7nLWptDVsnGk4uaTShLpNd5atixDVHHPpsw+vO+RVDahp/9IbymPjrJZbjep4ZttAx159OCm2Qt1Sr8XGk97wvqyacFu9azSqYtVx3vhfj7s6mZCt333EPch4ukjnzdG5zVO83PmH376dfev8s2OzIdOGTgi/bVsAnPf+qRj0ur52q8+8t/33oTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJsHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxSVdX/AcE4QUTRCmztAAAAAElFTkSuQmCC"
+ webUI["html/js/network_ts.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgLy9pZiAoU0VSVkVSX0NPTk5FQ1RJT04gPT0gdHJ1ZSkgewogICAgICAgIC8vICByZXR1cm4KICAgICAgICAvL30KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi93cy8iICsgIj9Ub2tlbj0iICsgZ2V0Q29va2llKCJUb2tlbiIpOwogICAgICAgIGRhdGFbImNtZCJdID0gdGhpcy5jbWQ7CiAgICAgICAgdmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOwogICAgICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgV1NfQVZBSUxBQkxFID0gdHJ1ZTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1QgKEpTKToiKTsKICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSRVFVRVNUOiAoSlNPTikiKTsKICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgICAgICB0aGlzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgIH07CiAgICAgICAgd3Mub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBpZiAoV1NfQVZBSUxBQkxFID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBhbGVydCgiTm8gd2Vic29ja2V0IGNvbm5lY3Rpb24gdG8gVGhyZWFkZmluIGNvdWxkIGJlIGVzdGFibGlzaGVkLiBDaGVjayB5b3VyIG5ldHdvcmsgY29uZmlndXJhdGlvbi4iKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgd3Mub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgU0VSVkVSX0NPTk5FQ1RJT04gPSBmYWxzZTsKICAgICAgICAgICAgc2hvd0VsZW1lbnQoImxvYWRpbmciLCBmYWxzZSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJSRVNQT05TRToiKTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShlLmRhdGEpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgidG9rZW4iKSkgewogICAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gIlRva2VuPSIgKyByZXNwb25zZVsidG9rZW4iXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2VbInN0YXR1cyJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBhbGVydChyZXNwb25zZVsiZXJyIl0pOwogICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJyZWxvYWQiKSkgewogICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgibG9nb1VSTCIpKSB7CiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5uZWwtaWNvbiIpOwogICAgICAgICAgICAgICAgZGl2LnZhbHVlID0gcmVzcG9uc2VbImxvZ29VUkwiXTsKICAgICAgICAgICAgICAgIGRpdi5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3dpdGNoIChkYXRhWyJjbWQiXSkgewogICAgICAgICAgICAgICAgY2FzZSAidXBkYXRlTG9nIjoKICAgICAgICAgICAgICAgICAgICBTRVJWRVJbImxvZyJdID0gcmVzcG9uc2VbImxvZyJdOwogICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9ncyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgU0VSVkVSID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgICAgIFNFUlZFUiA9IHJlc3BvbnNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgib3Blbk1lbnUiKSkgewogICAgICAgICAgICAgICAgdmFyIG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyZXNwb25zZVsib3Blbk1lbnUiXSk7CiAgICAgICAgICAgICAgICBtZW51LmNsaWNrKCk7CiAgICAgICAgICAgICAgICBzaG93RWxlbWVudCgicG9wdXAiLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJvcGVuTGluayIpKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSByZXNwb25zZVsib3BlbkxpbmsiXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoImFsZXJ0IikpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJhbGVydCJdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIndpemFyZCIpKSB7CiAgICAgICAgICAgICAgICBjcmVhdGVMYXlvdXQoKTsKICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb25XaXphcmRbcmVzcG9uc2VbIndpemFyZCJdXS5jcmVhdGVXaXphcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjcmVhdGVMYXlvdXQoKTsKICAgICAgICB9OwogICAgfQp9CmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7CiAgICB2YXIgdmFsdWUgPSAiOyAiICsgZG9jdW1lbnQuY29va2llOwogICAgdmFyIHBhcnRzID0gdmFsdWUuc3BsaXQoIjsgIiArIG5hbWUgKyAiPSIpOwogICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyKQogICAgICAgIHJldHVybiBwYXJ0cy5wb3AoKS5zcGxpdCgiOyIpLnNoaWZ0KCk7Cn0KLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmV0d29ya190cy5qcy5tYXA="
+ webUI["html/img/mapping.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0wMlQxMjowODo5NzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CpRxQsEAAAJLSURBVGgF7VoxTgMxEMwBHWlAaeABVCEtBcoD+EBewCdCyQsQtLyAPCBvCBSRIBUPCF1ogqBJjlkrezGr6HTrO98lhy1Z9trr2VmvnbMNjUadUhzHLeQB8hw5LS3QOUbubvIf7X3kKXIZibgS51bCZdWgMT6D8nECgArkngagQN0B8dhbkblalVmLIyheCGUthhjuLBq77MihA0xTjHHBEBBOorHLjjghbNOg4Mg2RYO4hIiEiHiaAV5aSwf8hRgjZdHtTTTc2ZFXpZkY+hMx5k3IZYlr7jgudJHp2JElLaF0K1mirYn8nAWgQB3ibM59ERNCA52d6Nghv9isQiUtn0kURe92I9eBcYA6YZxym8dyDuwRuMw82gjQYQbsPdLDdNCROO0US3uEfp3usTZpjf5J2CNtNFwjl7FHvmBnCB5PCQkQoJudJtGvE23sJEFuI39rQArS7dskXK6nlwkAKiB1VxAxLcyUePAH8cQmlbEul4+UM8LkVjPc2ZHcaFUDBEeqjoC0HyIiZ6RqOUSk6ghI+xyRD9mRQTYfIktPylaX16rhzo48KE29QH8kxjxC/hFtZYiGe70OjWVMW7Dx32bA3iO7//iAC8DOPweZFQhH6O+CmkRvW2f28oV8owEoUHdMPPg70rFJZajTkqT7uZ3ObaHEuuHOjnCpsb8vlKUsur2JhruLA94Y5QEOjuSZPR9jQ0R8zGoezNpFhN5RtUm+/bpgaG1u0jd2OSLDTRopbZ/okxcrLUYKvKprbRfHhXr8m5PK/y1V/gWRKLfiNSmxEAAAAABJRU5ErkJggg=="
+ webUI["html/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC"
webUI["html/img/m3u.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CumjVbcAAAGWSURBVGgF7VoxTgJRFGTFaGKBFnbEcABjb0fiBego7D2ABYmn8ARKRWFNQ6gx4QRQGWJJoY2VhXGdl7Dkh7Dsx3ns3yXvJ5P97L6d92bmhwYqlcWK43gK5L2enP51NP8F7pN721wPnOITZx9qG6HxI8QIZO+9XCHeL+VQKKm8QMyxb6+iCpH528AQYs58xIQWknV8mhDxCjEXWWJCC8maT55fAmOIudpUXAYhMn8dGEHMTZqYsgiR+U+BAcTcrhNTJiEy/xHQg5jOqpjD1RsBP3+id8u3P8TUoij6SuoLIwRDfWOofjLYtteyHa1UfcvvcUT1jqpGauVuHnyAdragjv/TAkley3uhj9Y5ZhDQa2+Olgmhz4IygSWibChNZ4nQFioTWCLKhtJ0lghtoTKBJaJsKE1nidAWKhNYIsqG0nSWCG2hMoElomwoTWeJ0BYqE1giyobSdJYIbaEygSWibChNZ4nQFioTWCLKhtJ0biJzmi1/guXMrpDn/OegO3bXMuAH0TtgAvwARV3y57Q34AGoJkL+AErKZ9cqbH7AAAAAAElFTkSuQmCC"
- webUI["html/js/settings_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3NfdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zZXR0aW5nc190cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGdCQUFnQjtJQUF0QjtRQUNFLGVBQVUsR0FBVyxrQkFBa0IsQ0FBQTtJQTh2QnpDLENBQUM7SUE3dkJDLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLElBQUksT0FBTyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzlDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQyxRQUFRLFdBQVcsRUFBRSxDQUFDO1lBRXBCLGVBQWU7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyw0QkFBNEIsR0FBRyxHQUFHLENBQUE7Z0JBRXJELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDbEUsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsa0NBQWtDLENBQUMsQ0FBQTtnQkFDckUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyxnQ0FBZ0MsR0FBRyxHQUFHLENBQUE7Z0JBRXpELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDNUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsc0NBQXNDLENBQUMsQ0FBQTtnQkFDekUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssV0FBVztnQkFDZCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFHLEdBQUcsQ0FBQTtnQkFFdkQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUMxRCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFBO2dCQUN0RSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxZQUFZO2dCQUNmLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsK0JBQStCLEdBQUcsR0FBRyxDQUFBO2dCQUV4RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQzNELEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLHFDQUFxQyxDQUFDLENBQUE7Z0JBQ3hFLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLGdCQUFnQjtnQkFDbkIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyxtQ0FBbUMsR0FBRyxHQUFHLENBQUE7Z0JBRTVELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUMvRCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFBO2dCQUM1RSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxhQUFhO2dCQUNoQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQTtnQkFFekQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUM1RCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFBO2dCQUN6RSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxnQkFBZ0I7Z0JBQ25CLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLEdBQUcsR0FBRyxDQUFBO2dCQUU1RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDL0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtnQkFDNUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssVUFBVTtnQkFDYixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLDZCQUE2QixHQUFHLEdBQUcsQ0FBQTtnQkFFdEQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUN6RCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFBO2dCQUN0RSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxhQUFhO2dCQUNoQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQTtnQkFFekQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUM1RCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFBO2dCQUN6RSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRUwsS0FBSyxhQUFhO2dCQUNoQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLGlDQUFpQyxHQUFHLEdBQUcsQ0FBQTtnQkFFMUQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUM1RCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFBO2dCQUMxRSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVQsYUFBYTtZQUNiLEtBQUssb0JBQW9CO2dCQUN2QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLHVDQUF1QyxHQUFHLEdBQUcsQ0FBQTtnQkFFaEUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyx1Q0FBdUMsR0FBRyxHQUFHLENBQUE7Z0JBRWhFLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQy9DLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNwQixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxvQkFBb0I7Z0JBQ3ZCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsdUNBQXVDLEdBQUcsR0FBRyxDQUFBO2dCQUVoRSxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssb0JBQW9CO2dCQUN2QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLHVDQUF1QyxHQUFHLEdBQUcsQ0FBQTtnQkFFaEUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyx1Q0FBdUMsR0FBRyxHQUFHLENBQUE7Z0JBRWhFLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQy9DLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNwQixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxjQUFjO2dCQUNqQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLGlDQUFpQyxHQUFHLEdBQUcsQ0FBQTtnQkFFMUQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsaUNBQWlDLEdBQUcsR0FBRyxDQUFBO2dCQUUxRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssNkJBQTZCO2dCQUNoQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLHdDQUF3QyxHQUFHLEdBQUcsQ0FBQTtnQkFFakUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLDRCQUE0QjtnQkFDL0IsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyx5Q0FBeUMsR0FBRyxHQUFHLENBQUE7Z0JBRWxFLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQy9DLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNwQixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxrQkFBa0I7Z0JBQ3JCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsc0NBQXNDLEdBQUcsR0FBRyxDQUFBO2dCQUUvRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssWUFBWTtnQkFDZixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQTtnQkFFekQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLFdBQVc7Z0JBQ1osSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRywrQkFBK0IsR0FBRyxHQUFHLENBQUE7Z0JBRXhELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDckUsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUscUNBQXFDLENBQUMsQ0FBQTtnQkFDeEUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVULEtBQUssc0JBQXNCO2dCQUN2QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLDBDQUEwQyxHQUFHLEdBQUcsQ0FBQTtnQkFFbkUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7Z0JBQ2hGLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLGdEQUFnRCxDQUFDLENBQUE7Z0JBQ25GLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFVCxLQUFLLHFCQUFxQjtnQkFDdEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyx5Q0FBeUMsR0FBRyxHQUFHLENBQUE7Z0JBRWxFLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO2dCQUMvRSxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFBO2dCQUNsRixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVQsS0FBSyxnQkFBZ0I7Z0JBQ2pCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsb0NBQW9DLEdBQUcsR0FBRyxDQUFBO2dCQUU3RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVULEtBQUssZUFBZTtnQkFDaEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyxtQ0FBbUMsR0FBRyxHQUFHLENBQUE7Z0JBRTVELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDekUsS0FBSyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtnQkFDNUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVULEtBQUsscUJBQXFCO2dCQUN0QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLHlDQUF5QyxHQUFHLEdBQUcsQ0FBQTtnQkFFbEUsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7Z0JBQy9FLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLCtDQUErQyxDQUFDLENBQUE7Z0JBQ2xGLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFVCxLQUFLLHFCQUFxQjtnQkFDeEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyx5Q0FBeUMsR0FBRyxHQUFHLENBQUE7Z0JBRWxFLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7Z0JBQy9DLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNwQixLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN4RSxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUUxQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxNQUFNO2dCQUNULElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsMEJBQTBCLEdBQUcsR0FBRyxDQUFBO2dCQUVuRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssT0FBTztnQkFDVixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLDJCQUEyQixHQUFHLEdBQUcsQ0FBQTtnQkFFcEQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsa0NBQWtDLEdBQUcsR0FBRyxDQUFBO2dCQUUzRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLElBQUksR0FBVSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTtnQkFDL0gsSUFBSSxNQUFNLEdBQVUsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBRWpJLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBQ2xFLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3pFLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBRTNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLGVBQWU7Z0JBQ2xCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLEdBQUcsR0FBRyxDQUFBO2dCQUU1RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDcEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDeEUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssS0FBSztnQkFDUixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLHlCQUF5QixHQUFHLEdBQUcsQ0FBQTtnQkFFbEQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ3BCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxTQUFTO1lBQ1QsS0FBSyxPQUFPO2dCQUNWLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsMkJBQTJCLEdBQUcsR0FBRyxDQUFBO2dCQUVwRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO2dCQUN0QixJQUFJLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO2dCQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDaEIsQ0FBQztnQkFFRCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO2dCQUNsRSxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN6RSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUUzQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxXQUFXO2dCQUNkLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsK0JBQStCLEdBQUcsR0FBRyxDQUFBO2dCQUV4RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLElBQUksR0FBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtnQkFDakMsSUFBSSxNQUFNLEdBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7Z0JBRW5DLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBQ2xFLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3pFLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBRTNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLGFBQWE7Z0JBQ2hCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3pDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsZ0NBQWdDLEdBQUcsR0FBRyxDQUFBO2dCQUV6RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLElBQUksR0FBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ3JELElBQUksTUFBTSxHQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFFdkQsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQTtnQkFDbEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsd0NBQXdDLENBQUMsQ0FBQTtnQkFDekUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFDM0IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDNUIsTUFBSztZQUVQLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxNQUFNLENBQUMsU0FBUyxHQUFHLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQTtnQkFFekQsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxJQUFJLEdBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO2dCQUM1RixJQUFJLE1BQU0sR0FBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7Z0JBRTNGLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUE7Z0JBQ2xFLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3pFLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBRTNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7WUFFUCxLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsR0FBRyxHQUFHLENBQUE7Z0JBRTlELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksSUFBSSxHQUFVLENBQUMsMENBQTBDLEVBQUUscURBQXFELEVBQUUsK0NBQStDLENBQUMsQ0FBQTtnQkFDdEssSUFBSSxNQUFNLEdBQVUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUUxQyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO2dCQUNsRSxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFBO2dCQUN6RSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUUzQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUM1QixNQUFLO1lBRVAsS0FBSyxPQUFPO2dCQUVWLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsMkJBQTJCLEdBQUcsR0FBRyxDQUFBO2dCQUVwRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLGlDQUFpQyxDQUFDLENBQUE7Z0JBQ3BFLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3hFLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRTFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7Z0JBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzVCLE1BQUs7UUFFVCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUE7SUFFaEIsQ0FBQztJQUdELGlCQUFpQixDQUFDLFdBQW1CO1FBRW5DLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUMsSUFBSSxJQUFZLENBQUE7UUFDaEIsUUFBUSxXQUFXLEVBQUUsQ0FBQztZQUVwQixLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxHQUFHLDZDQUE2QyxDQUFBO2dCQUNwRCxNQUFLO1lBRVAsS0FBSyxvQkFBb0I7Z0JBQ3ZCLElBQUksR0FBRyw2Q0FBNkMsQ0FBQTtnQkFDcEQsTUFBSztZQUVQLEtBQUssb0JBQW9CO2dCQUN2QixJQUFJLEdBQUcsNkNBQTZDLENBQUE7Z0JBQ3BELE1BQUs7WUFFUCxLQUFLLG9CQUFvQjtnQkFDdkIsSUFBSSxHQUFHLDZDQUE2QyxDQUFBO2dCQUNwRCxNQUFLO1lBRVAsS0FBSyxvQkFBb0I7Z0JBQ3ZCLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3JELElBQUksR0FBRyw2Q0FBNkMsQ0FBQTtnQkFDdEQsQ0FBQztnQkFDRCxNQUFLO1lBRVAsS0FBSyxxQkFBcUI7Z0JBQ3hCLElBQUksR0FBRywrQ0FBK0MsQ0FBQTtnQkFDdEQsTUFBSztZQUVQLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxHQUFHLHVDQUF1QyxDQUFBO2dCQUM5QyxNQUFLO1lBRVAsS0FBSyxhQUFhO2dCQUNoQixJQUFJLEdBQUcsc0NBQXNDLENBQUE7Z0JBQzdDLE1BQUs7WUFFUCxLQUFLLGFBQWE7Z0JBQ2hCLElBQUksR0FBRyxzQ0FBc0MsQ0FBQTtnQkFDN0MsTUFBSztZQUVQLEtBQUssV0FBVztnQkFDZCxJQUFJLEdBQUcsb0NBQW9DLENBQUE7Z0JBQzNDLE1BQUs7WUFFUCxLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxHQUFHLDJDQUEyQyxDQUFBO2dCQUNsRCxNQUFLO1lBRVAsS0FBSyxnQkFBZ0I7Z0JBQ25CLElBQUksR0FBRyxzQ0FBc0MsQ0FBQTtnQkFDN0MsTUFBSztZQUVQLEtBQUssa0JBQWtCO2dCQUNyQixJQUFJLEdBQUcsNENBQTRDLENBQUE7Z0JBQ25ELE1BQUs7WUFFUCxLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxHQUFHLHNDQUFzQyxDQUFBO2dCQUM3QyxNQUFLO1lBRVAsS0FBSyxXQUFXO2dCQUNkLElBQUksR0FBRyxxQ0FBcUMsQ0FBQTtnQkFDNUMsTUFBSztZQUVQLEtBQUssc0JBQXNCO2dCQUN2QixJQUFJLEdBQUcsZ0RBQWdELENBQUE7Z0JBQ3ZELE1BQUs7WUFFVCxLQUFLLHFCQUFxQjtnQkFDdEIsSUFBSSxHQUFHLCtDQUErQyxDQUFBO2dCQUN0RCxNQUFLO1lBRVQsS0FBSyxnQkFBZ0I7Z0JBQ25CLElBQUksR0FBRywwQ0FBMEMsQ0FBQTtnQkFDakQsTUFBSztZQUVQLEtBQUssZUFBZTtnQkFDbEIsSUFBSSxHQUFHLHlDQUF5QyxDQUFBO2dCQUNoRCxNQUFLO1lBRVAsS0FBSyxxQkFBcUI7Z0JBQ3hCLElBQUksR0FBRywrQ0FBK0MsQ0FBQTtnQkFDdEQsTUFBSztZQUVQLEtBQUssZ0JBQWdCO2dCQUNuQixJQUFJLEdBQUcseUNBQXlDLENBQUE7Z0JBQ2hELE1BQUs7WUFFUCxLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxHQUFHLHFDQUFxQyxDQUFBO2dCQUM1QyxNQUFLO1lBRVAsS0FBSyxhQUFhO2dCQUNoQixJQUFJLEdBQUcsc0NBQXNDLENBQUE7Z0JBQzdDLE1BQUs7WUFFUCxLQUFLLGdCQUFnQjtnQkFDbkIsSUFBSSxHQUFHLHlDQUF5QyxDQUFBO2dCQUNoRCxNQUFLO1lBRVAsS0FBSyxVQUFVO2dCQUNiLElBQUksR0FBRyxtQ0FBbUMsQ0FBQTtnQkFDMUMsTUFBSztZQUVQLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxHQUFHLHNDQUFzQyxDQUFBO2dCQUM3QyxNQUFLO1lBRVAsS0FBSyxXQUFXO2dCQUNkLElBQUksR0FBRyxxQ0FBcUMsQ0FBQTtnQkFDNUMsTUFBSztZQUVQLEtBQUssT0FBTztnQkFDVixJQUFJLEdBQUcsaUNBQWlDLENBQUE7Z0JBQ3hDLE1BQUs7WUFFUCxLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxHQUFHLGtDQUFrQyxDQUFBO2dCQUN6QyxNQUFLO1lBRVAsS0FBSyxLQUFLO2dCQUNSLElBQUksR0FBRywrQkFBK0IsQ0FBQTtnQkFDdEMsTUFBSztZQUVQLEtBQUssTUFBTTtnQkFDVCxJQUFJLEdBQUcsZ0NBQWdDLENBQUE7Z0JBQ3ZDLE1BQUs7WUFFUCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksR0FBRyx1Q0FBdUMsQ0FBQTtnQkFDOUMsTUFBSztZQUVQLEtBQUssY0FBYztnQkFDakIsSUFBSSxHQUFHLHVDQUF1QyxDQUFBO2dCQUM5QyxNQUFLO1lBRVAsS0FBSyw2QkFBNkI7Z0JBQ2hDLElBQUksR0FBRyw4Q0FBOEMsQ0FBQTtnQkFDckQsTUFBSztZQUVQLEtBQUssNEJBQTRCO2dCQUMvQixJQUFJLEdBQUcsK0NBQStDLENBQUE7Z0JBQ3RELE1BQUs7WUFFUCxLQUFLLE9BQU87Z0JBQ1YsSUFBSSxHQUFHLGlDQUFpQyxDQUFBO2dCQUN4QyxNQUFLO1lBRVA7Z0JBQ0UsSUFBSSxHQUFHLEVBQUUsQ0FBQTtnQkFDVCxNQUFLO1FBRVQsQ0FBQztRQUVELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7UUFFckIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ3BCLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMvQixXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLE9BQU8sV0FBVyxDQUFBO0lBRXBCLENBQUM7Q0FFRjtBQUVELE1BQU0sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBSWpELFlBQVksUUFBZ0IsRUFBRSxZQUFvQjtRQUNoRCxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6RCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1FBRXBDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFekIsc0NBQXNDO1FBRXRDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFM0MsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBRXpCLFFBQVEsV0FBVyxFQUFFLENBQUM7Z0JBRXBCLEtBQUssb0JBQW9CLENBQUM7Z0JBQzFCLEtBQUssb0JBQW9CLENBQUM7Z0JBQzFCLEtBQUssb0JBQW9CLENBQUM7Z0JBQzFCLEtBQUssb0JBQW9CO29CQUN2QixJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUN0RCxNQUFLO29CQUNQLENBQUM7Z0JBRUg7b0JBQ0UsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtvQkFDM0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUVyRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUN2QixLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUM5QixNQUFLO1lBRVQsQ0FBQztRQUVILENBQUMsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN0QixHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7Q0FFRjtBQUVELFNBQVMsWUFBWTtJQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqRCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN0QyxDQUFDO0FBRUgsQ0FBQztBQUVELFNBQVMsWUFBWTtJQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTdCLElBQUksR0FBRyxHQUFHLGNBQWMsQ0FBQTtJQUN4QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDckQsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXBELElBQUksV0FBVyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7SUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV6QyxJQUFJLElBQVksQ0FBQTtRQUNoQixJQUFJLEtBQVUsQ0FBQTtRQUVkLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLEtBQUssT0FBTztnQkFFVixRQUFTLFFBQVEsQ0FBQyxDQUFDLENBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQy9DLEtBQUssVUFBVTt3QkFDYixJQUFJLEdBQUksUUFBUSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxJQUFJLENBQUE7d0JBQzdDLEtBQUssR0FBSSxRQUFRLENBQUMsQ0FBQyxDQUFzQixDQUFDLE9BQU8sQ0FBQTt3QkFDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQTt3QkFDekIsTUFBSztvQkFFUCxLQUFLLE1BQU07d0JBQ1QsSUFBSSxHQUFJLFFBQVEsQ0FBQyxDQUFDLENBQXNCLENBQUMsSUFBSSxDQUFBO3dCQUM3QyxLQUFLLEdBQUksUUFBUSxDQUFDLENBQUMsQ0FBc0IsQ0FBQyxLQUFLLENBQUE7d0JBRS9DLFFBQVEsSUFBSSxFQUFFLENBQUM7NEJBQ2IsS0FBSyxRQUFRO2dDQUNYLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dDQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQU0sSUFBSSxPQUFPLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dDQUNwRCxNQUFLOzRCQUVQLEtBQUssZ0JBQWdCO2dDQUNuQixLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUU3QixDQUFDO3dCQUVELFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUE7d0JBQ3pCLE1BQUs7Z0JBQ1QsQ0FBQztnQkFFRCxNQUFLO1lBRVAsS0FBSyxRQUFRO2dCQUNYLElBQUksR0FBSSxRQUFRLENBQUMsQ0FBQyxDQUF1QixDQUFDLElBQUksQ0FBQTtnQkFDOUMsS0FBSyxHQUFJLFFBQVEsQ0FBQyxDQUFDLENBQXVCLENBQUMsS0FBSyxDQUFBO2dCQUVoRCxnRUFBZ0U7Z0JBQ2hFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUE7Z0JBQzNCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNyQyxDQUFDO2dCQUVELE1BQUs7UUFFVCxDQUFDO0lBRUgsQ0FBQztJQUVELElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7SUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQTtJQUU5QixJQUFJLE1BQU0sR0FBVyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RCLENBQUMifQ=="
+ webUI["html/img/users.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0zMFQxNzowODozODwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CjU01MMAAANJSURBVGgF1ZnLaxNRFMYz2rpoFbW+SCsihaJQRMT6rPhAXAq6c+HChSguRFd1oRtd+A/oWhQ3oiiWFB91UbqRqlXXgoIIQhFbQTTQao2/GzLDZEjIPefO7SQHPjJz55zzfd/MZCa5N8h5ilKptJvWp8FekAed4Bv4Cj6Dh2A4CIJZPpszMHEV2MQ0SZdB0DROENMHjoEzQBoFCpZnbgYR58E/qfpE/kv2F2dmBvJ94G9ClHb3SiZGUBuASa3qGnVzjG3RmFmkKYrVHGB7e2zfdbOdBhc1TVyNnNSQNqg5wVURf/FdjRxpIEpzuIOio9JCtRHO2hrINkgJLfPFt6vaCII2WYrSpPVJi1RGuBrmTbxeSibIX5j3CUauAfOo9BXzNH4nMJ5TXREI1gHzqPQVRtc2zCyxJdAaGbclcMj7zi/jOdt6rZFhCH7akijznknqVEY4U78heSAhUuTekNSojFQIChIiYe57TtZrSY2LkecQzUjIBLljglz3VJ4qg+AXSDNGabbWXZ2wA6Qjabqg136hhHK6y60V8o2EGyl8/qHHpKZPGkYeQzyvIa9RM86XvFhjvOGQsxGIp2B50ZDJLuG2XZqnLO5rM3viGh9o0OZJon1bRLxxdHLcns1jJiYOAu2U0D2P0uStMXJdcVU+UdMlZ/NYgaA28ERg5ge5/R4l6VsjrANMWJiZJWeXnqm60vnxW90ul6u8ByaS4zX2i+S+qjGuGkrdSEWFzT1vlhlSC19Gui0UtnNriSfi6vX1ZWRjPcLEeGrzYqkb4SyvQGxvQnC93cF6BzIfx8gpYBsfSdycuei4AAR1ggugCCRh1lbugIF4vwXbhtisjfSDc+ARSOOf4lv6mNWv1VIj1ouQNF9K851gDzArtWbV1uYxS5o4zB+sp+AuKPC+cVv5RXwPuATMmUpreY1Wopgh+ybYKj4dFHWB+8DMwTZTjCHmsJUhEgfAF9DMcQtx9V8dHMyDqWZ2ENM2FL8yVV92kkY56GM5Lc6Z1vY0jbp5EJQnuqPLg4kdLWTCnIxVIJoDi4wweNYcbbGIfuLEjRxqMRNGbvTvsmyE22oZg70taKQn1BxekXw40GKfK0O9oZHsJ8ZCRbLPaI3xP7YzeQoHxWckAAAAAElFTkSuQmCC"
webUI["html/js/authentication_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRpb25fdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hdXRoZW50aWNhdGlvbl90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxTQUFTLEtBQUs7SUFDWixJQUFJLEdBQUcsR0FBVyxLQUFLLENBQUE7SUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtJQUN2QixJQUFJLEdBQUcsR0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2hELElBQUksSUFBSSxHQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUV4RCxJQUFJLE1BQU0sR0FBTyxHQUFHLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUU1QyxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFzQixDQUFDLElBQUksQ0FBQTtRQUNyRCxJQUFJLEtBQUssR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFzQixDQUFDLEtBQUssQ0FBQTtRQUV4RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1lBQ25DLEdBQUcsR0FBRyxJQUFJLENBQUE7UUFDWixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUVuQixDQUFDO0lBRUQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEIsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7UUFDbkIsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDZixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1lBQzdELFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUE7WUFFNUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBQUcscUJBQXFCLENBQUE7WUFDaEUsT0FBTTtRQUNSLENBQUM7SUFFSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUVqQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFaEIsQ0FBQyJ9"
- webUI["html/js/base_ts.js"] = "dmFyIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKY29uc3QgdG9vbHRpcFRyaWdnZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIl0nKTsKY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcFRyaWdnZXJMaXN0XS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpOwovLyBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwp2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZEpTKCcuY29weS1idG4nKTsKY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IHRvb2x0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlLnRyaWdnZXIpOwogICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogJ0NvcGllZCEnIH0pOwp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmZpbGVzfX0iLCAidXBkYXRlLGZpbGVzLnVwZGF0ZSx0ZW1wLnBhdGgsY2FjaGUuaW1hZ2VzLCx4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMseGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUsZW5hYmxlTm9uQXNjaWkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5Lm5ldHdvcmt9fSIsICJsaXN0ZW5pbmdJcCxodHRwVGhyZWFkZmluRG9tYWluLGZvcmNlSHR0cHMsaHR0cHNQb3J0LGh0dHBzVGhyZWFkZmluRG9tYWluIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5zdHJlYW1pbmd9fSIsICJidWZmZXIsdWRweHksYnVmZmVyLnNpemUua2Isc3RvcmVCdWZmZXJJblJBTSxidWZmZXIudGltZW91dCx1c2VyLmFnZW50LGZmbXBlZy5wYXRoLGZmbXBlZy5vcHRpb25zLHZsYy5wYXRoLHZsYy5vcHRpb25zIikpOwpzZXR0aW5nc0NhdGVnb3J5LnB1c2gobmV3IFNldHRpbmdzQ2F0ZWdvcnlJdGVtKCJ7ey5zZXR0aW5ncy5jYXRlZ29yeS5iYWNrdXB9fSIsICJiYWNrdXAucGF0aCxiYWNrdXAua2VlcCIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuYXV0aGVudGljYXRpb259fSIsICJhdXRoZW50aWNhdGlvbi53ZWIsYXV0aGVudGljYXRpb24ucG1zLGF1dGhlbnRpY2F0aW9uLm0zdSxhdXRoZW50aWNhdGlvbi54bWwsYXV0aGVudGljYXRpb24uYXBpIikpOwpmdW5jdGlvbiBzaG93UG9wVXBFbGVtZW50KGVsbSkgewogICAgc2hvd0VsZW1lbnQoZWxtLCB0cnVlKTsKICAgIC8vIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgLy8gICBzaG93RWxlbWVudCgicG9wdXAiLCB0cnVlKTsKICAgIC8vIH0sIDEwKTsKICAgIHJldHVybjsKfQpmdW5jdGlvbiBzaG93RWxlbWVudChlbG1JRCwgdHlwZSkgewogICAgaWYgKGVsbUlEID09ICJwb3B1cC1jdXN0b20iIHx8IGVsbUlEID09ICJwb3B1cCIpIHsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgcG9wdXBNb2RhbC5zaG93KCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgaWYgKGVsbUlEID09ICJsb2FkaW5nIikgewogICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBsb2FkaW5nTW9kYWwuaGlkZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUJ1dHRvbkFjdGlvbihlbGVtZW50LCBidXR0b25JRCwgYXR0cmlidXRlKSB7CiAgICB2YXIgdmFsdWUgPSBlbGVtZW50Lm9wdGlvbnNbZWxlbWVudC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbklEKS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSk7Cn0KZnVuY3Rpb24gZ2V0TG9jYWxEYXRhKGRhdGFUeXBlLCBpZCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CiAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJoZGhyIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsZXMiXVtkYXRhVHlwZV1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJmaWx0ZXIiOgogICAgICAgIGNhc2UgImN1c3RvbS1maWx0ZXIiOgogICAgICAgIGNhc2UgImdyb3VwLXRpdGxlIjoKICAgICAgICAgICAgaWYgKGlkID09IC0xKSB7CiAgICAgICAgICAgICAgICBkYXRhWyJhY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICBkYXRhWyJjYXNlU2Vuc2l0aXZlIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgIGRhdGFbImRlc2NyaXB0aW9uIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImV4Y2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsiZmlsdGVyIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImluY2x1ZGUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsibmFtZSJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJ0eXBlIl0gPSAiZ3JvdXAtdGl0bGUiOwogICAgICAgICAgICAgICAgZGF0YVsieC1jYXRlZ29yeSJdID0gIiI7CiAgICAgICAgICAgICAgICBTRVJWRVJbInNldHRpbmdzIl1bImZpbHRlciJdW2lkXSA9IGRhdGE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVsiZmlsdGVyIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAidXNlcnMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJ1c2VycyJdW2lkXVsiZGF0YSJdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtYXBwaW5nIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJtM3VHcm91cHMiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJkYXRhIl1bInBsYXlsaXN0Il1bIm0zdSJdWyJncm91cHMiXTsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gZGF0YTsKfQpmdW5jdGlvbiBnZXRPYmpLZXlzKG9iaikgewogICAgdmFyIGtleXMgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFyIGkgaW4gb2JqKSB7CiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkgewogICAgICAgICAgICBrZXlzLnB1c2goaSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGtleXM7Cn0KZnVuY3Rpb24gZ2V0T3duT2JqUHJvcHMob2JqZWN0KSB7CiAgICByZXR1cm4gb2JqZWN0ID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSA6IFtdOwp9CmZ1bmN0aW9uIGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKSB7CiAgICB2YXIgY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTsKICAgIGlmIChCVUxLX0VESVQgPT0gZmFsc2UpIHsKICAgICAgICByZXR1cm4gY2hhbm5lbHM7CiAgICB9CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfdGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRyc1tpXS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIikgewogICAgICAgICAgICBpZiAodHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID09IHRydWUpIHsKICAgICAgICAgICAgICAgIGNoYW5uZWxzLnB1c2godHJzW2ldLmlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBjaGFubmVsczsKfQpmdW5jdGlvbiBzZWxlY3RBbGxDaGFubmVscyh0YWJsZV9uYW1lID0gImNvbnRlbnRfdGFibGUiKSB7CiAgICB2YXIgYnVsayA9IGZhbHNlOwogICAgdmFyIHRycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlX25hbWUpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgaWYgKHRyc1swXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9PSB0cnVlKSB7CiAgICAgICAgYnVsayA9IHRydWU7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0cnNbaV0uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsKICAgICAgICAgICAgc3dpdGNoIChidWxrKSB7CiAgICAgICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICAgICAgdHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgdHJzW2ldLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYnVsa0VkaXQoKSB7CiAgICBCVUxLX0VESVQgPSAhQlVMS19FRElUOwogICAgdmFyIGNsYXNzTmFtZTsKICAgIHZhciByb3dzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiYnVsayIpOwogICAgc3dpdGNoIChCVUxLX0VESVQpIHsKICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJidWxrIHNob3dCdWxrIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgY2xhc3NOYW1lID0gImJ1bGsgaGlkZUJ1bGsiOwogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykgewogICAgICAgIHJvd3NbaV0uY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgIHJvd3NbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNvcnRUYWJsZShjb2x1bW4sIHRhYmxlX25hbWUgPSAiY29udGVudF90YWJsZSIpIHsKICAgIC8vIGNvbnNvbGUubG9nKCJDT0xVTU46ICIgKyBjb2x1bW4pOwogICAgaWYgKChjb2x1bW4gPT0gQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudF90YWJsZSIpIHx8IChjb2x1bW4gPT0gSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgJiYgdGFibGVfbmFtZSA9PSAiaW5hY3RpdmVfY29udGVudF90YWJsZSIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVfbmFtZSk7CiAgICB2YXIgdGFibGVIZWFkID0gdGFibGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIilbMF07CiAgICB2YXIgdGFibGVJdGVtcyA9IHRhYmxlSGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKTsKICAgIHZhciBzb3J0T2JqID0gbmV3IE9iamVjdCgpOwogICAgdmFyIHgsIHhWYWx1ZTsKICAgIHZhciB0YWJsZUhlYWRlcjsKICAgIHZhciBzb3J0QnlTdHJpbmcgPSBmYWxzZTsKICAgIGlmIChjb2x1bW4gPiAwICYmIENPTFVNTl9UT19TT1JUID4gMCAmJiB0YWJsZV9uYW1lID09ICJjb250ZW50X3RhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGVsc2UgaWYgKGNvbHVtbiA+IDAgJiYgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPiAwICYmIHRhYmxlX25hbWUgPT0gImluYWN0aXZlX2NvbnRlbnRfdGFibGUiKSB7CiAgICAgICAgdGFibGVJdGVtc1tJTkFDVElWRV9DT0xVTU5fVE9fU09SVF0uY2xhc3NOYW1lID0gInBvaW50ZXIiOwogICAgICAgIHRhYmxlSXRlbXNbY29sdW1uXS5jbGFzc05hbWUgPSAic29ydFRoaXMiOwogICAgfQogICAgaWYgKHRhYmxlX25hbWUgPT0gImNvbnRlbnRfdGFibGUiKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSBjb2x1bW47CiAgICB9CiAgICBlbHNlIGlmICh0YWJsZV9uYW1lID09ICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIikgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gY29sdW1uOwogICAgfQogICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOwogICAgaWYgKHJvd3NbMV0gIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdGFibGVIZWFkZXIgPSByb3dzWzBdOwogICAgICAgIHggPSByb3dzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgZm9yIChpID0gMTsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgeCA9IHJvd3NbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIilbY29sdW1uXTsKICAgICAgICAgICAgc3dpdGNoICh4LmNoaWxkTm9kZXNbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICBjYXNlICJpbnB1dCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiSU5QVVQiKVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicCI6CiAgICAgICAgICAgICAgICAgICAgeFZhbHVlID0geC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiUCIpWzBdLmlubmVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDogY29uc29sZS5sb2coeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh4VmFsdWUgPT0gIiIpIHsKICAgICAgICAgICAgICAgIHhWYWx1ZSA9IGk7CiAgICAgICAgICAgICAgICBzb3J0T2JqW2ldID0gcm93c1tpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoaXNOYU4oeFZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHBhcnNlRmxvYXQoeFZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWVdID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBzb3J0QnlTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBzb3J0T2JqW3hWYWx1ZS50b0xvd2VyQ2FzZSgpICsgaV0gPSByb3dzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB3aGlsZSAodGFibGUuZmlyc3RDaGlsZCkgewogICAgICAgICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0YWJsZS5maXJzdENoaWxkKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNvcnRWYWx1ZXMgPSBnZXRPYmpLZXlzKHNvcnRPYmopOwogICAgICAgIGlmIChzb3J0QnlTdHJpbmcgPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY29sdW1uID09IDMpIHsKICAgICAgICAgICAgICAgIHZhciBjb2xsYXRvciA9IG5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogJ2Jhc2UnIH0pOwogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KGNvbGxhdG9yLmNvbXBhcmUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZ1bmN0aW9uIHNvcnRGbG9hdChhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ydFZhbHVlcy5zb3J0KHNvcnRGbG9hdCk7CiAgICAgICAgfQogICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRhYmxlSGVhZGVyKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvcnRWYWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoc29ydE9ialtzb3J0VmFsdWVzW2ldXSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaE9iaigpIHsKICAgIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgdmFyIGNoYW5uZWxzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgIHZhciBjaGFubmVsS2V5cyA9IFsieC1hY3RpdmUiLCAieC1jaGFubmVsSUQiLCAieC1uYW1lIiwgIl9maWxlLm0zdS5uYW1lIiwgIngtZ3JvdXAtdGl0bGUiLCAieC14bWx0di1maWxlIl07CiAgICBjaGFubmVscy5mb3JFYWNoKGlkID0+IHsKICAgICAgICBjaGFubmVsS2V5cy5mb3JFYWNoKGtleSA9PiB7CiAgICAgICAgICAgIGlmIChrZXkgPT0gIngtYWN0aXZlIikgewogICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhW2lkXVtrZXldKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib25saW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9ICJvZmZsaW5lICI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGtleSA9PSAieC14bWx0di1maWxlIikgewogICAgICAgICAgICAgICAgICAgIHZhciB4bWx0dkZpbGUgPSBnZXRWYWx1ZUZyb21Qcm92aWRlckZpbGUoZGF0YVtpZF1ba2V5XSwgInhtbHR2IiwgIm5hbWUiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoeG1sdHZGaWxlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSBTRUFSQ0hfTUFQUElOR1tpZF0gKyB4bWx0dkZpbGUgKyAiICI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgZGF0YVtpZF1ba2V5XSArICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gZW5hYmxlR3JvdXBTZWxlY3Rpb24oc2VsZWN0b3IpIHsKICAgIHZhciBsYXN0Y2hlY2sgPSBudWxsOyAvLyBubyBjaGVja2JveGVzIGNsaWNrZWQgeWV0CiAgICAvLyBnZXQgZGVzaXJlZCBjaGVja2JveGVzCiAgICB2YXIgY2hlY2tib3hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgLy8gbG9vcCBvdmVyIGNoZWNrYm94ZXMgdG8gYWRkIGV2ZW50IGxpc3RlbmVyCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNoZWNrYm94ZXMsIGZ1bmN0aW9uIChjYngsIGlkeCkgewogICAgICAgIGNieC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgLy8gdGVzdCBmb3Igc2hpZnQga2V5LCBub3QgZmlyc3QgY2hlY2tib3gsIGFuZCBub3Qgc2FtZSBjaGVja2JveAogICAgICAgICAgICBpZiAoZXZ0LnNoaWZ0S2V5ICYmIG51bGwgIT09IGxhc3RjaGVjayAmJiBpZHggIT09IGxhc3RjaGVjaykgewogICAgICAgICAgICAgICAgLy8gZ2V0IHJhbmdlIG9mIGNoZWNrcyBiZXR3ZWVuIGxhc3QtY2hlY2tib3ggYW5kIHNoaWZ0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAvLyBNYXRoLm1pbi9tYXggZG9lcyBvdXIgc29ydGluZyBmb3IgdXMKICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoZWNrYm94ZXMsIE1hdGgubWluKGxhc3RjaGVjaywgaWR4KSwgTWF0aC5tYXgobGFzdGNoZWNrLCBpZHgpKQogICAgICAgICAgICAgICAgICAgIC8vIGFuZCBsb29wIG92ZXIgZWFjaAogICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChjY2J4KSB7CiAgICAgICAgICAgICAgICAgICAgY2NieC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhc3RjaGVjayA9IGlkeDsgLy8gc2V0IHRoaXMgY2hlY2tib3ggYXMgbGFzdC1jaGVja2VkIGZvciBsYXRlcgogICAgICAgIH0pOwogICAgfSk7Cn0KZnVuY3Rpb24gc2VhcmNoSW5NYXBwaW5nKCkgewogICAgdmFyIHNlYXJjaFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaE1hcHBpbmciKS52YWx1ZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF90YWJsZSIpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpOwogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgaWQgPSB0cnNbaV0uZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgIHZhciBlbGVtZW50ID0gU0VBUkNIX01BUFBJTkdbaWRdOwogICAgICAgIHN3aXRjaCAoZWxlbWVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXJzKGVsZW1lbnRzKSB7CiAgICB2YXIgc3RhcnRpbmdfbnVtYmVyX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgieC1jaGFubmVscy1zdGFydCIpWzBdOwogICAgdmFyIGVsZW1zID0gZWxlbWVudHMuc3BsaXQoIiwiKTsKICAgIHZhciBzdGFydGluZ19udW1iZXIgPSBwYXJzZUZsb2F0KHN0YXJ0aW5nX251bWJlcl9lbGVtZW50LnZhbHVlKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIGVsZW1zLmZvckVhY2goZWxlbWVudCA9PiB7CiAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50KTsKICAgICAgICB2YXIgaW5wdXQgPSBlbGVtLmNoaWxkTm9kZXNbMV0uZmlyc3RDaGlsZDsKICAgICAgICBpbnB1dC52YWx1ZSA9IHN0YXJ0aW5nX251bWJlci50b1N0cmluZygpOwogICAgICAgIGRhdGFbZWxlbWVudF1bIngtY2hhbm5lbElEIl0gPSBzdGFydGluZ19udW1iZXIudG9TdHJpbmcoKTsKICAgICAgICBzdGFydGluZ19udW1iZXIrKzsKICAgIH0pOwogICAgaWYgKENPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxKTsKICAgIH0KICAgIGlmIChJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlX2NvbnRlbnRfcGFnZSIpOwogICAgfQp9CmZ1bmN0aW9uIGNoYW5nZUNoYW5uZWxOdW1iZXIoZWxlbWVudCkgewogICAgdmFyIGRiSUQgPSBlbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZDsKICAgIHZhciBuZXdOdW1iZXIgPSBwYXJzZUZsb2F0KGVsZW1lbnQudmFsdWUpOwogICAgdmFyIGNoYW5uZWxOdW1iZXJzID0gW107CiAgICB2YXIgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICB2YXIgY2hhbm5lbHMgPSBnZXRPYmpLZXlzKGRhdGEpOwogICAgaWYgKGlzTmFOKG5ld051bWJlcikpIHsKICAgICAgICBhbGVydCgie3suYWxlcnQuaW52YWxpZENoYW5uZWxOdW1iZXJ9fSIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNoYW5uZWxzLmZvckVhY2goaWQgPT4gewogICAgICAgIHZhciBjaGFubmVsTnVtYmVyID0gcGFyc2VGbG9hdChkYXRhW2lkXVsieC1jaGFubmVsSUQiXSk7CiAgICAgICAgY2hhbm5lbE51bWJlcnMucHVzaChjaGFubmVsTnVtYmVyKTsKICAgIH0pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFubmVsTnVtYmVycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjaGFubmVsTnVtYmVycy5pbmRleE9mKG5ld051bWJlcikgPT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChNYXRoLmZsb29yKG5ld051bWJlcikgPT0gbmV3TnVtYmVyKSB7CiAgICAgICAgICAgIG5ld051bWJlciA9IG5ld051bWJlciArIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdOdW1iZXIgKyAwLjE7CiAgICAgICAgICAgIG5ld051bWJlci50b0ZpeGVkKDEpOwogICAgICAgICAgICBuZXdOdW1iZXIgPSBNYXRoLnJvdW5kKG5ld051bWJlciAqIDEwKSAvIDEwOwogICAgICAgIH0KICAgIH0KICAgIGRhdGFbZGJJRF1bIngtY2hhbm5lbElEIl0gPSBuZXdOdW1iZXIudG9TdHJpbmcoKTsKICAgIGVsZW1lbnQudmFsdWUgPSBuZXdOdW1iZXI7CiAgICBpZiAoQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEpOwogICAgfQogICAgaWYgKElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxLCAiaW5hY3RpdmVfY29udGVudF9wYWdlIik7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gYmFja3VwKCkgewogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBjb25zb2xlLmxvZygiQmFja3VwIGRhdGEiKTsKICAgIHZhciBjbWQgPSAiVGhyZWFkZmluQmFja3VwIjsKICAgIGNvbnNvbGUubG9nKCJTRU5EIFRPIFNFUlZFUiIpOwogICAgY29uc29sZS5sb2coZGF0YSk7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcihjbWQpOwogICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdG9nZ2xlQ2hhbm5lbFN0YXR1cyhpZCkgewogICAgdmFyIGVsZW1lbnQ7CiAgICB2YXIgc3RhdHVzOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKSkgewogICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY3RpdmUiKTsKICAgICAgICBzdGF0dXMgPSAoY2hlY2tib3gpLmNoZWNrZWQ7CiAgICB9CiAgICB2YXIgaWRzID0gZ2V0QWxsU2VsZWN0ZWRDaGFubmVscygpOwogICAgaWYgKGlkcy5sZW5ndGggPT0gMCkgewogICAgICAgIGlkcy5wdXNoKGlkKTsKICAgIH0KICAgIGlkcy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgY2hhbm5lbCA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl1baWRdOwogICAgICAgIGNoYW5uZWxbIngtYWN0aXZlIl0gPSBzdGF0dXM7CiAgICAgICAgc3dpdGNoIChjaGFubmVsWyJ4LWFjdGl2ZSJdKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIGlmIChjaGFubmVsWyJ4LXhtbHR2LWZpbGUiXSA9PSAiLSIgfHwgY2hhbm5lbFsieC1tYXBwaW5nIl0gPT0gIi0iKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKEJVTEtfRURJVCA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChjaGFubmVsWyJ4LW5hbWUiXSArICI6IE1pc3NpbmcgWE1MVFYgZmlsZSAvIGNoYW5uZWwiKQogICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFsieC1hY3RpdmUiXSA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBmYWxzZToKICAgICAgICAgICAgICAgIC8vIGNvZGUuLi4KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhbm5lbFsieC1hY3RpdmUiXSA9PSBmYWxzZSkgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gIm5vdEFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NOYW1lID0gImFjdGl2ZUVQRyI7CiAgICAgICAgfQogICAgfSk7Cn0KZnVuY3Rpb24gcmVzdG9yZSgpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgcmVzdG9yZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CiAgICByZXN0b3JlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiIik7CiAgICByZXN0b3JlLmlkID0gInVwbG9hZCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlc3RvcmUpOwogICAgcmVzdG9yZS5jbGljaygpOwogICAgcmVzdG9yZS5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmlsZW5hbWUgPSByZXN0b3JlLmZpbGVzWzBdLm5hbWU7CiAgICAgICAgdmFyIGNoZWNrID0gY29uZmlybSgiRmlsZTogIiArIGZpbGVuYW1lICsgIlxue3suY29uZmlybS5yZXN0b3JlfX0iKTsKICAgICAgICBpZiAoY2hlY2sgPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICAgICAgdmFyIGZpbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPWZpbGVdJykuZmlsZXNbMF07CiAgICAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNtZCA9ICJUaHJlYWRmaW5SZXN0b3JlIjsKICAgICAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdG9yZS5yZW1vdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH07CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBsb2FkTG9nbygpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBsb2FkJykucmVtb3ZlKCk7CiAgICB9CiAgICB2YXIgdXBsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSU5QVVQiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAibm90VmlzaWJsZSIpOwogICAgdXBsb2FkLnNldEF0dHJpYnV0ZSgibmFtZSIsICIiKTsKICAgIHVwbG9hZC5pZCA9ICJ1cGxvYWQiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh1cGxvYWQpOwogICAgdXBsb2FkLmNsaWNrKCk7CiAgICB1cGxvYWQub25ibHVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIGFsZXJ0KCk7CiAgICB9OwogICAgdXBsb2FkLm9uY2hhbmdlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IHVwbG9hZC5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVhZGVyLnJlc3VsdCk7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgICAgICAgIHZhciBjbWQgPSAidXBsb2FkTG9nbyI7CiAgICAgICAgICAgICAgICBkYXRhWyJiYXNlNjQiXSA9IHJlYWRlci5yZXN1bHQ7CiAgICAgICAgICAgICAgICBkYXRhWyJmaWxlbmFtZSJdID0gZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgICAgICAgICAgICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgICAgICAgICAgICAgdmFyIHVwZGF0ZUxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXBkYXRlLWljb24nKTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgdXBkYXRlTG9nby5jbGFzc05hbWUgPSAiY2hhbmdlZCI7CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbGVydCgiRmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkIik7CiAgICAgICAgfQogICAgICAgIHVwbG9hZC5yZW1vdmUoKTsKICAgICAgICByZXR1cm47CiAgICB9Owp9CmZ1bmN0aW9uIGNoZWNrVW5kbyhrZXkpIHsKICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgY2FzZSAiZXBnTWFwcGluZyI6CiAgICAgICAgICAgIGlmIChVTkRPLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgIFNFUlZFUlsieGVwZyJdW2tleV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVORE9ba2V5XSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgVU5ET1trZXldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShTRVJWRVJbInhlcGciXVtrZXldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc29ydFNlbGVjdChlbGVtKSB7CiAgICB2YXIgdG1wQXJ5ID0gW107CiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IGVsZW1bZWxlbS5zZWxlY3RlZEluZGV4XS52YWx1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5vcHRpb25zLmxlbmd0aDsgaSsrKQogICAgICAgIHRtcEFyeS5wdXNoKGVsZW0ub3B0aW9uc1tpXSk7CiAgICB0bXBBcnkuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKGEudGV4dCA8IGIudGV4dCkgPyAtMSA6IDE7IH0pOwogICAgd2hpbGUgKGVsZW0ub3B0aW9ucy5sZW5ndGggPiAwKQogICAgICAgIGVsZW0ub3B0aW9uc1swXSA9IG51bGw7CiAgICB2YXIgbmV3U2VsZWN0ZWRJbmRleCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRtcEFyeS5sZW5ndGg7IGkrKykgewogICAgICAgIGVsZW0ub3B0aW9uc1tpXSA9IHRtcEFyeVtpXTsKICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnZhbHVlID09IHNlbGVjdGVkVmFsdWUpCiAgICAgICAgICAgIG5ld1NlbGVjdGVkSW5kZXggPSBpOwogICAgfQogICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gbmV3U2VsZWN0ZWRJbmRleDsgLy8gU2V0IG5ldyBzZWxlY3RlZCBpbmRleCBhZnRlciBzb3J0aW5nCiAgICByZXR1cm47Cn0KZnVuY3Rpb24gdXBkYXRlTG9nKCkgewogICAgY29uc29sZS5sb2coIlRPS0VOIik7CiAgICB2YXIgc2VydmVyID0gbmV3IFNlcnZlcigidXBkYXRlTG9nIik7CiAgICBzZXJ2ZXIucmVxdWVzdChuZXcgT2JqZWN0KCkpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2VfdHMuanMubWFw"
- webUI["html/js/network_ts.js"] = "Y2xhc3MgU2VydmVyIHsKICAgIGNvbnN0cnVjdG9yKGNtZCkgewogICAgICAgIHRoaXMuY21kID0gY21kOwogICAgfQogICAgcmVxdWVzdChkYXRhKSB7CiAgICAgICAgaWYgKFNFUlZFUl9DT05ORUNUSU9OID09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IHRydWU7CiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgICAgaWYgKHRoaXMuY21kICE9ICJ1cGRhdGVMb2ciKSB7CiAgICAgICAgICAgIC8vIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgdHJ1ZSkKICAgICAgICAgICAgVU5ETyA9IG5ldyBPYmplY3QoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgICAgICAgICAgY2FzZSAiaHR0cDoiOgogICAgICAgICAgICAgICAgdGhpcy5wcm90b2NvbCA9ICJ3czovLyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHM6IjoKICAgICAgICAgICAgICAgIHRoaXMucHJvdG9jb2wgPSAid3NzOi8vIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdXJsID0gdGhpcy5wcm90b2NvbCArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICI6IiArIHdpbmRvdy5sb2NhdGlvbi5wb3J0ICsgIi9kYXRhLyIgKyAiP1Rva2VuPSIgKyBnZXRDb29raWUoIlRva2VuIik7CiAgICAgICAgZGF0YVsiY21kIl0gPSB0aGlzLmNtZDsKICAgICAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CiAgICAgICAgd3Mub25vcGVuID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICBXU19BVkFJTEFCTEUgPSB0cnVlOwogICAgICAgICAgICBjb25zb2xlLmxvZygiUkVRVUVTVCAoSlMpOiIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFUVVFU1Q6IChKU09OKSIpOwogICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgICAgIHRoaXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7CiAgICAgICAgfTsKICAgICAgICB3cy5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5vIHdlYnNvY2tldCBjb25uZWN0aW9uIHRvIFRocmVhZGZpbiBjb3VsZCBiZSBlc3RhYmxpc2hlZC4gQ2hlY2sgeW91ciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uIik7CiAgICAgICAgICAgIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChXU19BVkFJTEFCTEUgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KCJObyB3ZWJzb2NrZXQgY29ubmVjdGlvbiB0byBUaHJlYWRmaW4gY291bGQgYmUgZXN0YWJsaXNoZWQuIENoZWNrIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBTRVJWRVJfQ09OTkVDVElPTiA9IGZhbHNlOwogICAgICAgICAgICBzaG93RWxlbWVudCgibG9hZGluZyIsIGZhbHNlKTsKICAgICAgICAgICAgY29uc29sZS5sb2coIlJFU1BPTlNFOiIpOwogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGUuZGF0YSk7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTsKICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJ0b2tlbiIpKSB7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiVG9rZW49IiArIHJlc3BvbnNlWyJ0b2tlbiJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZVsic3RhdHVzIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlWyJlcnIiXSk7CiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoInJlbG9hZCIpKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJsb2dvVVJMIikpIHsKICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbm5lbC1pY29uIik7CiAgICAgICAgICAgICAgICBkaXYudmFsdWUgPSByZXNwb25zZVsibG9nb1VSTCJdOwogICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSA9ICJjaGFuZ2VkIjsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKGRhdGFbImNtZCJdKSB7CiAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGVMb2ciOgogICAgICAgICAgICAgICAgICAgIFNFUlZFUlsibG9nIl0gPSByZXNwb25zZVsibG9nIl07CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50X2xvZyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMb2dzKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBTRVJWRVIgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgU0VSVkVSID0gcmVzcG9uc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmhhc093blByb3BlcnR5KCJvcGVuTWVudSIpKSB7CiAgICAgICAgICAgICAgICB2YXIgbWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJlc3BvbnNlWyJvcGVuTWVudSJdKTsKICAgICAgICAgICAgICAgIG1lbnUuY2xpY2soKTsKICAgICAgICAgICAgICAgIHNob3dFbGVtZW50KCJwb3B1cCIsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzT3duUHJvcGVydHkoIm9wZW5MaW5rIikpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHJlc3BvbnNlWyJvcGVuTGluayJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgiYWxlcnQiKSkgewogICAgICAgICAgICAgICAgYWxlcnQocmVzcG9uc2VbImFsZXJ0Il0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgicmVsb2FkIikpIHsKICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXNwb25zZS5oYXNPd25Qcm9wZXJ0eSgid2l6YXJkIikpIHsKICAgICAgICAgICAgICAgIGNyZWF0ZUxheW91dCgpOwogICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbldpemFyZFtyZXNwb25zZVsid2l6YXJkIl1dLmNyZWF0ZVdpemFyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNyZWF0ZUxheW91dCgpOwogICAgICAgIH07CiAgICB9Cn0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsKICAgIHZhciB2YWx1ZSA9ICI7ICIgKyBkb2N1bWVudC5jb29raWU7CiAgICB2YXIgcGFydHMgPSB2YWx1ZS5zcGxpdCgiOyAiICsgbmFtZSArICI9Iik7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDIpCiAgICAgICAgcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCI7Iikuc2hpZnQoKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1uZXR3b3JrX3RzLmpzLm1hcA=="
- webUI["html/css/screen.css"] = "bmF2IGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXgtaGVpZ2h0OiAyMHB4Ow0KICBtYXgtd2lkdGg6IDIwcHg7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KDQpuYXYgcCB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHBhZGRpbmc6IDBweCAzMHB4Ow0KfQ0KDQojbGF5b3V0IHsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KLmZvcm0tY29udHJvbDpkaXNhYmxlZCB7DQogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KfQ0KDQoubGF5b3V0LWxlZnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgbWluLXdpZHRoOiAxNTBweDsNCiAgbWF4LXdpZHRoOiAyMCU7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQogIGhlaWdodDogaW5oZXJpdDsNCiAgZmxvYXQ6IGxlZnQ7DQp9DQoNCi5sYXlvdXQtcmlnaHQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KI21lbnUtd3JhcHBlciB7DQogIGhlaWdodDogMTAwJTsNCn0NCg0KDQojbG9nbyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtaW4td2lkdGg6IDE4MHB4Ow0KICB3aWR0aDogMTAwJTsNCiAgaGVpZ2h0OiAxMDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdGhyZWFkZmluLnBuZyIpOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7DQogIGJhY2tncm91bmQtc2l6ZTogMTAwJTsNCn0NCg0KDQojcGFnZSB7DQogIG1heC13aWR0aDogOTUwcHg7DQogIG1hcmdpbjogYXV0bzsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCg0KICAvKg0KICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTMwcHgpOw0KICBoZWlnaHQ6IC1tb3otY2FsYygxMDAlIC0gMTMwcHgpOw0KICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEzMHB4KTsNCiAgKi8NCg0KICBtaW4taGVpZ2h0OiAtd2Via2l0LWNhbGMoMTAwJSAtIDEyMHB4KTsNCiAgbWluLWhlaWdodDogLW1vei1jYWxjKDEwMCUgLSAxMjBweCk7DQogIG1pbi1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEyMHB4KTsNCg0KDQogIGJveC1zaGFkb3c6IDBweCA1cHggNXB4ICMyMjI7DQoNCn0NCg0KI3VpU2V0dGluZyB7DQogIGZsb2F0OiByaWdodDsNCiAgbWFyZ2luLXJpZ2h0OiAyNXB4Ow0KfQ0KDQojYm94IGlucHV0W3R5cGU9dGV4dF0sDQojYm94IGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgd2lkdGg6IC13ZWJraXQtY2FsYygxMDAlIC0gMjBweCk7DQogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogY2FsYygxMDAlIC0gMjBweCk7DQp9DQoNCiNib3ggaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgbWFyZ2luOiA1MHB4IGF1dG87DQp9DQoNCiNzZXR0aW5ncyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBwYWRkaW5nOiAxMHB4IDEwcHg7DQp9DQoNCiNzZXR0aW5ncyBoNSB7DQogIG1hcmdpbjogNTBweCAwcHggMTBweCAwcHg7DQp9DQoNCiNjb250ZW50LWludGVyYWN0aW9uIC5zZWFyY2ggew0KICB3aWR0aDogMjAwcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7DQogIHBhZGRpbmc6IDlweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMzsNCiAgbWFyZ2luOiAxMHB4Ow0KICBmbG9hdDogcmlnaHQ7DQogIGJvcmRlci1yYWRpdXM6IDNweDsNCg0KfQ0KDQojbXlTdHJlYW1zIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsNCiAgd2lkdGg6IDEwMCU7DQogIG1heC13aWR0aDogOTUwcHg7DQoNCiAgLyoNCiAgbWF4LWhlaWdodDogMTAwcHg7DQogICovDQogIG1hcmdpbi1ib3R0b206IDBweDsNCn0NCg0KI215U3RyZWFtcyBpbWcgew0KICB3aWR0aDogNCU7DQogIHBhZGRpbmc6IDJweCA1cHg7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQojc2V0dGluZ3MtZm9vdGVyIHt9DQoNCg0KLyogV2l6YXJkKi8NCiNib3ggew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Ow0KICBtaW4taGVpZ2h0OiA0MDBweDsNCg0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCiNib3ggcCB7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KfQ0KDQojYm94LWZvb3RlciB7DQogIG1hcmdpbi10b3A6IGF1dG87DQp9DQoNCiNib3gtZm9vdGVyIHsNCiAgbWFyZ2luOiBhdXRvOw0KICBwYWRkaW5nOiAxMHB4Ow0KfQ0KDQojaGVhZGxpbmUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOw0KICBib3JkZXItYm90dG9tOiBzb2xpZCAycHggIzIyMjsNCiAgdHJhbnNpdGlvbjogYWxsIDAuNXM7DQogIHBhZGRpbmc6IDEwcHggMHB4Ow0KICBkaXNwbGF5OiBibG9jazsNCn0NCg0KI2NvbnRlbnQgew0KICBkaXNwbGF5OiBibG9jazsNCiAgb3ZlcmZsb3c6IGF1dG87DQogIHBhZGRpbmc6IDEwcHg7DQp9DQoNCi8qIC0tLSAqLw0KDQoNCiNjbGllbnRJbmZvLA0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZGlzcGxheTogYmxvY2s7DQogIGZvbnQtc2l6ZTogMTJweDsNCiAgY29sb3I6ICMwMEU2RkY7DQogIHBhZGRpbmc6IDBweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMgdGhlYWQsDQojaW5hY3RpdmVTdHJlYW1zIHRoZWFkIHsNCiAgZm9udC1zaXplOiAyZW07DQp9DQoNCiNvcGVuU3RyZWFtcyB7DQogIHdpZHRoOiAyMHB4Ow0KICBoZWlnaHQ6IDIwMHB4Ow0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGZsb2F0OiByaWdodDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICByaWdodDogMHB4Ow0KICBib3R0b206IDBweDsNCiAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvdG91Y2gucG5nIik7DQogIGJhY2tncm91bmQtY29sb3I6ICMxMTE7DQoNCiAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIHJpZ2h0Ow0KfQ0KDQojYWxsU3RyZWFtcyB7DQogIHBhZGRpbmc6IDJweDsNCn0NCg0KI2FjdGl2ZVN0cmVhbXMsDQojaW5hY3RpdmVTdHJlYW1zIHsNCiAgLyogd2lkdGg6IDUwJTsgKi8NCiAgLyogZmxvYXQ6IGxlZnQ7ICovDQp9DQoNCiNhY3RpdmVTdHJlYW1zIC50ZEtleSwNCiNpbmFjdGl2ZVN0cmVhbXMgLnRkS2V5IHsNCiAgd2lkdGg6IDExNXB4Ow0KICBsZXR0ZXItc3BhY2luZzogMHB4Ow0KfQ0KDQpjYXB0aW9uIHsNCiAgY29sb3I6ICNGRkY7DQogIGZvbnQtc2l6ZTogMmVtOw0KfQ0KDQoudGRLZXkgew0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoudGRWYWwgew0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQoubW9kYWwtaGVhZGVyIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIxMjUyOTsNCn0NCi5tb2RhbC1ib2R5IHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsNCn0NCg0KI2luYWN0aXZlU3RyZWFtcyAudGRLZXkgew0KICBjb2xvcjogcmVkOw0KfQ0KDQojY2xpZW50SW5mbyAudGRWYWwsDQojbG9nSW5mbyAudGRWYWwsDQojYWN0aXZlU3RyZWFtcyAudGRWYWwsDQojaW5hY3RpdmVTdHJlYW1zIC50ZFZhbCwNCiNtYXBwaW5nSW5mbyAudGRWYWwgew0KICBjb2xvcjogI2FhYTsNCiAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7DQp9DQoNCiNib3gtd3JhcHBlciB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgd2lkdGg6IDEwMCU7DQoNCiAgb3ZlcmZsb3cteTogc2Nyb2xsOw0KfQ0KDQojY29udGVudF90YWJsZSwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlLA0KI21hcHBpbmctZGV0YWlsLXRhYmxlLA0KI2NvbnRlbnRfdGFibGUgew0KICBkaXNwbGF5OiB0YWJsZTsNCiAgLS1icy10YWJsZS1jb2xvcjogbm9uZTsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgb3ZlcmZsb3cteTogc2Nyb2xsOw0KfQ0KDQojaW5hY3RpdmVfY29udGVudF90YWJsZSB7DQogIG1hcmdpbi10b3A6IDIlOw0KfQ0KDQoNCiNjb250ZW50X3RhYmxlIC5jb250ZW50X3RhYmxlX2hlYWRlciwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIC5pbmFjdGl2ZV9jb250ZW50X3RhYmxlX2hlYWRlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIGhlaWdodDogNTBweDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMxMTE7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggIzMzMzsNCiAgY3Vyc29yOiBhdXRvOw0KDQp9DQoNCg0KdGJvZHkgew0KICB3aWR0aDogMTAwJTsNCn0NCg0KDQoudGFibGVFbGxpcHNpcyB7DQogIHdpZHRoOiAxNTBweDsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCiNjb250ZW50X3RhYmxlIGltZywNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGltZyB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICBtYXgtd2lkdGg6IDYwcHg7DQp9DQoNCiNjb250ZW50X3RhYmxlIHRyLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIgew0KICBib3JkZXItbGVmdDogc29saWQgM3B4IDQ0NDsNCiAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4ICMzMzM7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KI2NvbnRlbnRfdGFibGUgdHI6aG92ZXIsDQojaW5hY3RpdmVfY29udGVudF90YWJsZSB0cjpob3ZlciB7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQp9DQoNCiNjb250ZW50X3RhYmxlIHRkLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdGQgew0KDQogIHBhZGRpbmc6IDBweCAycHg7DQp9DQoNCiNjb250ZW50X3RhYmxlIGlucHV0W3R5cGU9dGV4dF0sDQojaW5hY3RpdmVfY29udGVudF90YWJsZSBpbnB1dFt0eXBlPXRleHRdIHsNCiAgd2lkdGg6IDgwJTsNCiAgbWluLXdpZHRoOiAzNXB4Ow0KICBtYXgtd2lkdGg6IDYwcHg7DQogIGJvcmRlcjogMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOw0KICBtYXJnaW4tbGVmdDogNXB4Ow0KICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KDQojY29udGVudF90YWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdIHsNCiAgbWF4LXdpZHRoOiAyNXB4Ow0KICBtYXJnaW46IGF1dG87DQp9DQoNCg0KLnNob3dCdWxrIHsNCiAgZGlzcGxheTogYmxvY2s7DQp9DQoNCi5oaWRlQnVsayB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCi5ub0J1bGsge30NCg0KI2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHLA0KI2luYWN0aXZlX2NvbnRlbnRfdGFibGUgdHIuYWN0aXZlRVBHIHsNCiAgYm9yZGVyLWxlZnQ6IHNvbGlkIDNweCBsYXduZ3JlZW47DQp9DQoNCiNjb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRywNCiNpbmFjdGl2ZV9jb250ZW50X3RhYmxlIHRyLm5vdEFjdGl2ZUVQRyB7DQogIGJvcmRlci1sZWZ0OiBzb2xpZCAzcHggcmVkOw0KfQ0KDQoNCiNsb2dTY3JlZW4gcCB7DQogIHdoaXRlLXNwYWNlOiBwcmU7DQogIGZvbnQtc2l6ZTogMTBweDsNCiAgLyoNCiAgbGluZS1oZWlnaHQ6IDEuNmVtOw0KICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsNCiAgKi8NCiAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBmb250LXN0eWxlOiBub3JtYWw7DQogIGZvbnQtdmFyaWFudDogbm9ybWFsOw0KICBsaW5lLWhlaWdodDogMS42ZW07DQp9DQoNCiNtYXBwaW5nLWRldGFpbCwNCiN1c2VyLWRldGFpbCwNCiNmaWxlLWRldGFpbCB7DQogIGJveC1zaGFkb3c6IDBweCA1cHggNDBweCAjMDAwOw0KICBtYXJnaW4tdG9wOiAyMHB4Ow0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KDQogIG1heC13aWR0aDogNjAwcHg7DQogIGJhY2tncm91bmQtY29sb3I6ICMyMjI7DQogIHBhZGRpbmc6IDEwcHg7DQogIG92ZXJmbG93OiBhdXRvOw0KfQ0KDQojZmlsZS1kZXRhaWwgaW5wdXRbdHlwZT10ZXh0XSB7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwgaW1nIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1heC1oZWlnaHQ6IDMwcHg7DQogIG1hcmdpbi1ib3R0b206IDIwcHg7DQogIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICBtYXJnaW4tcmlnaHQ6IGF1dG87DQp9DQoNCiNtYXBwaW5nLWRldGFpbCBpbnB1dFt0eXBlPXRleHRdLA0KI2NvbnRlbnRfc2V0dGluZ3MgaW5wdXRbdHlwZT10ZXh0XSwNCiNjb250ZW50X3NldHRpbmdzIGlucHV0W3R5cGU9cGFzc3dvcmRdIHsNCiAgYm9yZGVyOiBzb2xpZCAxcHg7DQogIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7DQogIGJhY2tncm91bmQtY29sb3I6ICMzMzM7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDIwcHgpOw0KICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAyMHB4KTsNCiAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOw0KfQ0KDQojbWFwcGluZy1kZXRhaWwtdGFibGUsDQojdXNlci1kZXRhaWwtdGFibGUgew0KICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7DQogIHdpZHRoOiAxMDAlOw0KfQ0KDQojY29udGVudF9zZXR0aW5ncyB0YWJsZSB7DQogIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgdGFibGUtbGF5b3V0OiBmaXhlZDsNCiAgd2lkdGg6IDEwMCU7DQp9DQoNCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLA0KI3VzZXItZGV0YWlsLXRhYmxlIHRkIHsNCiAgcGFkZGluZzogMTBweCAwcHg7DQoNCn0NCg0KI21hcHBpbmctZGV0YWlsLXRhYmxlIHRkLmxlZnQsDQojdXNlci1kZXRhaWwtdGFibGUgdGQubGVmdCB7DQogIHdpZHRoOiAzOCU7DQp9DQoNCi5pbnRlcmFjdGlvbiwNCiNpbnRlcmFjdGlvbiB7DQogIG1hcmdpbi10b3A6IDIwcHg7DQogIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICBmbG9hdDogcmlnaHQ7DQp9DQoNCi5pbnRlcmFjdGlvbiBpbnB1dFt0eXBlPWJ1dHRvbl0sDQouaW50ZXJhY3Rpb24gaW5wdXRbdHlwZT1zdWJtaXRdIHsNCiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCiAgbWluLXdpZHRoOiAxMDBweDsNCiAgbWFyZ2luOiAwcHggMTBweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQojbm90aWZpY2F0aW9uIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgcmlnaHQ6IDBweDsNCiAgaGVpZ2h0OiAxMDAlOw0KICB3aWR0aDogMjUwcHg7DQoNCiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsNCiAgYm94LXNoYWRvdzogMHB4IDBweCAyMHB4ICMwMDA7DQp9DQoNCiNub3RpZmljYXRpb24gaDUgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTIxMjEyOw0KICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwcmUgew0KICBwYWRkaW5nOiAwcHggMTBweCAwcHggMTBweDsNCn0NCg0KI25vdGlmaWNhdGlvbiBwIHsNCiAgZm9udC1zaXplOiAxMCBweDsNCiAgbWFyZ2luOiAwcHg7DQogIHBhZGRpbmc6IDBweCAxMHB4IDVweCAxMHB4Ow0KfQ0KDQojbm90aWZpY2F0aW9uIC5lbGVtZW50IHsNCiAgLypwYWRkaW5nOiAwcHggNXB4OyovDQogIG1hcmdpbjogNXB4IDVweDsNCiAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTgxODE4Ow0KICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBncmVlbjsNCn0NCg0KDQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDYyMHB4KSB7DQogIGJvZHkgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogIH0NCg0KICBoMSB7DQogICAgZm9udC1zaXplOiAyNnB4Ow0KICAgIGxldHRlci1zcGFjaW5nOiAzcHg7DQogIH0NCg0KICBuYXYgcCB7DQogICAgZGlzcGxheTogYmxvY2s7DQogIH0NCg0KDQoNCiAgI2hlYWRlcl9jb25maWcgew0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGhlaWdodDogMTAwcHg7DQogICAgYmFja2dyb3VuZDogdXJsKCIuLi9pbWcvbG9nb193XzYwMHgyMDAucG5nIik7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCg0KICAgIGJhY2tncm91bmQtc2l6ZTogMzAwcHggMTAwcHg7DQogIH0NCg0KICAjc2NyZWVuTG9nIHsNCiAgICBtYXJnaW4tbGVmdDogMzAwcHg7DQoNCiAgICB0cmFuc2l0aW9uOiBub25lOw0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCB0cmFuc3BhcmVudDsNCiAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAjMjIyOw0KICB9DQoNCiAgI3NldHRpbmdzIHsNCiAgICAvKg0KICAgIGhlaWdodDogLXdlYmtpdC1jYWxjKDEwMCUgLSAxMDBweCk7DQogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwMHB4KTsNCiAgICAqLw0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBvdmVyZmxvdzogYXV0bzsNCiAgfQ0KDQoNCiAgLnNjcmVlbkxvZ0hpZGRlbiB7DQogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LCAwcHgpOw0KICB9DQoNCg0KICAjYm94IHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBtaW4taGVpZ2h0OiA1MDBweDsNCiAgICBtYXgtd2lkdGg6IDUwMHB4Ow0KICAgIG1hcmdpbjogMTBweCBhdXRvOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7DQogICAgYm94LXNoYWRvdzogMHB4IDVweCA1cHggIzIyMjsNCg0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgfQ0KDQogICNzZXR0aW5ncywNCiAgI3NldHRpbmdzLWZvb3RlciB7fQ0KfQ0KDQovKg0KPT09PT09PT09PT09PT09IA0KU2lkZWJhcg0KPT09PT09PT09PT09PT09DQoqLw0KOnJvb3Qgew0KICAvKiBkYXJrIHNoYWRlcyBvZiBwcmltYXJ5IGNvbG9yKi8NCiAgLS1jbHItcHJpbWFyeS0xOiBoc2woMjA1LCA4NiUsIDE3JSk7DQogIC0tY2xyLXByaW1hcnktMjogaHNsKDIwNSwgNzclLCAyNyUpOw0KICAtLWNsci1wcmltYXJ5LTM6IGhzbCgyMDUsIDcyJSwgMzclKTsNCiAgLS1jbHItcHJpbWFyeS00OiBoc2woMjA1LCA2MyUsIDQ4JSk7DQogIC8qIHByaW1hcnkvbWFpbiBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTU6IGhzbCgyMDUsIDc4JSwgNjAlKTsNCiAgLyogbGlnaHRlciBzaGFkZXMgb2YgcHJpbWFyeSBjb2xvciAqLw0KICAtLWNsci1wcmltYXJ5LTY6IGhzbCgyMDUsIDg5JSwgNzAlKTsNCiAgLS1jbHItcHJpbWFyeS03OiBoc2woMjA1LCA5MCUsIDc2JSk7DQogIC0tY2xyLXByaW1hcnktODogaHNsKDIwNSwgODYlLCA4MSUpOw0KICAtLWNsci1wcmltYXJ5LTk6IGhzbCgyMDUsIDkwJSwgODglKTsNCiAgLS1jbHItcHJpbWFyeS0xMDogaHNsKDIwNSwgMTAwJSwgOTYlKTsNCiAgLyogZGFya2VzdCBncmV5IC0gdXNlZCBmb3IgaGVhZGluZ3MgKi8NCiAgLS1jbHItZ3JleS0xOiBoc2woMjA5LCA2MSUsIDE2JSk7DQogIC0tY2xyLWdyZXktMjogaHNsKDIxMSwgMzklLCAyMyUpOw0KICAtLWNsci1ncmV5LTM6IGhzbCgyMDksIDM0JSwgMzAlKTsNCiAgLS1jbHItZ3JleS00OiBoc2woMjA5LCAyOCUsIDM5JSk7DQogIC8qIGdyZXkgdXNlZCBmb3IgcGFyYWdyYXBocyAqLw0KICAtLWNsci1ncmV5LTU6IGhzbCgyMTAsIDIyJSwgNDklKTsNCiAgLS1jbHItZ3JleS02OiBoc2woMjA5LCAyMyUsIDYwJSk7DQogIC0tY2xyLWdyZXktNzogaHNsKDIxMSwgMjclLCA3MCUpOw0KICAtLWNsci1ncmV5LTg6IGhzbCgyMTAsIDMxJSwgODAlKTsNCiAgLS1jbHItZ3JleS05OiBoc2woMjEyLCAzMyUsIDg5JSk7DQogIC0tY2xyLWdyZXktMTA6IGhzbCgyMTAsIDM2JSwgOTYlKTsNCiAgLS1jbHItd2hpdGU6ICNmZmY7DQogIC0tY2xyLXJlZC1kYXJrOiBoc2woMzYwLCA2NyUsIDQ0JSk7DQogIC0tY2xyLXJlZC1saWdodDogaHNsKDM2MCwgNzElLCA2NiUpOw0KICAtLWNsci1ncmVlbi1kYXJrOiBoc2woMTI1LCA2NyUsIDQ0JSk7DQogIC0tY2xyLWdyZWVuLWxpZ2h0OiBoc2woMTI1LCA3MSUsIDY2JSk7DQogIC0tY2xyLW9yYW5nZTogaHNsKDE0LDkzJSw1MyUpOw0KICAtLWNsci1ibGFjazogIzIyMjsNCiAgLS1mZi1wcmltYXJ5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsNCiAgLS1mZi1zZWNvbmRhcnk6ICdPcGVuIFNhbnMnLCBzYW5zLXNlcmlmOw0KICAtLXRyYW5zaXRpb246IGFsbCAwLjNzIGxpbmVhcjsNCiAgLS1zcGFjaW5nOiAwLjFyZW07DQogIC0tcmFkaXVzOiAwLjI1cmVtOw0KICAtLWxpZ2h0LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDAsIDAsIDAsIDAuMSk7DQogIC0tZGFyay1zaGFkb3c6IDAgNXB4IDE1cHggcmdiYSgwLCAwLCAwLCAwLjIpOw0KICAtLW1heC13aWR0aDogMTE3MHB4Ow0KICAtLWZpeGVkLXdpZHRoOiA2MjBweDsNCn0NCg0KLnNpZGViYXItdG9nZ2xlIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDQ0cmVtOw0KICBsZWZ0OiAxMXJlbTsNCiAgZm9udC1zaXplOiAycmVtOw0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsNCiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICB0cmFuc2l0aW9uOiB2YXIoLS10cmFuc2l0aW9uKTsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICAvKiBhbmltYXRpb246IGJvdW5jZSAxMHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7ICovDQp9DQouc2lkZWJhci10b2dnbGU6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogZXhwYW5kIC41cyBlYXNlLWluIGZvcndhcmRzOw0KfQ0KLnNpZGViYXItdG9nZ2xlOm5vdCg6aG92ZXIpIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGNvbGxhcHNlIC41cyBlYXNlLW91dCBmb3J3YXJkczsNCn0NCkBrZXlmcmFtZXMgZXhwYW5kIHsNCiAgMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCiAgNTAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7DQogIH0NCiAgMTAwJSB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjI1KTsNCiAgfQ0KfQ0KQGtleWZyYW1lcyBjb2xsYXBzZSB7DQogIDAlIHsNCiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMjUpOw0KICB9DQogIDEwMCUgew0KICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7DQogIH0NCn0NCg0KLnNpZGViYXItaGVhZGVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nOiAxcmVtIDEuNXJlbTsNCn0NCi5jbG9zZS1idG4gew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHRvcDogNDRyZW07DQogIGxlZnQ6IDcwcmVtOw0KICBmb250LXNpemU6IDJyZW07DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KICBjdXJzb3I6IHBvaW50ZXI7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQouY2xvc2UtYnRuOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLWNsci1vcmFuZ2UpOw0KICBhbmltYXRpb246IGV4cGFuZCAuNXMgZWFzZS1pbiBmb3J3YXJkczsNCn0NCi5jbG9zZS1idG46bm90KDpob3Zlcikgew0KICBjb2xvcjogdmFyKC0tY2xyLW9yYW5nZSk7DQogIGFuaW1hdGlvbjogY29sbGFwc2UgLjVzIGVhc2Utb3V0IGZvcndhcmRzOw0KfQ0KLmxvZ28gew0KICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsNCiAgaGVpZ2h0OiA0MHB4Ow0KfQ0KDQoubGlua3MgYSB7DQogIGRpc3BsYXk6IGJsb2NrOw0KICBmb250LXNpemU6IDEuNXJlbTsNCiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7DQogIHBhZGRpbmc6IDFyZW0gMS41cmVtOw0KICBjb2xvcjogdmFyKC0tY2xyLWdyZXktNSk7DQogIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24pOw0KfQ0KLmxpbmtzIGE6aG92ZXIgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jbHItcHJpbWFyeS04KTsNCiAgY29sb3I6IHZhcigtLWNsci1wcmltYXJ5LTUpOw0KICBwYWRkaW5nLWxlZnQ6IDEuNzVyZW07DQp9DQouc29jaWFsLWljb25zIHsNCiAganVzdGlmeS1zZWxmOiBjZW50ZXI7DQogIGRpc3BsYXk6IGZsZXg7DQogIHBhZGRpbmctYm90dG9tOiAycmVtOw0KfQ0KLnNvY2lhbC1pY29ucyBhIHsNCiAgZm9udC1zaXplOiAxLjVyZW07DQogIG1hcmdpbjogMCAwLjVyZW07DQogIGNvbG9yOiB2YXIoLS1jbHItcHJpbWFyeS01KTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQp9DQouc29jaWFsLWljb25zIGE6aG92ZXIgew0KICBjb2xvcjogdmFyKC0tY2xyLXByaW1hcnktMSk7DQp9DQoNCi5zaWRlYmFyIHsNCiAgcG9zaXRpb246IGZpeGVkOw0KICB0b3A6IDA7DQogIGxlZnQ6IDA7DQogIHdpZHRoOiAxMDAlOw0KICBoZWlnaHQ6IDEwMCU7DQogIGJhY2tncm91bmQ6IHZhcigtLWNsci1ibGFjayk7DQogIGRpc3BsYXk6IGdyaWQ7DQogIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnIgYXV0bzsNCiAgcm93LWdhcDogMXJlbTsNCiAgYm94LXNoYWRvdzogdmFyKC0tY2xyLXJlZC1kYXJrKTsNCiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbik7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0xMDAlKTsNCn0NCi5zaG93LXNpZGViYXIgew0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwKTsNCn0NCi5zaG93LXNpZGViYXIgLmNsb3NlLWJ0biB7DQogIGRpc3BsYXk6IGJsb2NrOw0KfQ0KQG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjc2cHgpIHsNCiAgLnNpZGViYXIgew0KICAgIHdpZHRoOiAxMDAwcHg7DQogIH0NCn0NCg0KLnNpZGViYXIgLmNhcmQgew0KICB3aWR0aDogNDRlbTsNCiAgbWFyZ2luOiAzZW07DQp9DQouY2FyZCB7DQogIC8qIGNvbG9yOiB2YXIoLS1jbHItYmxhY2spOyAqLw0KICBib3JkZXI6IDVweCBzb2xpZCB2YXIoLS1jbHItb3JhbmdlKTsNCn0NCi8qIC5jYXJkIGlucHV0W3R5cGU9dGV4dF0gew0KICBjb2xvcjogdmFyKC0tY2xyLWJsYWNrKTsNCiAgb3V0bGluZTogdmFyKC0tY2xyLWJsYWNrKTsNCiAgYm9yZGVyOiBzb2xpZCAxcHggdmFyKC0tY2xyLWJsYWNrKTsNCn0gKi8NCi5jYXJkIGxhYmVsIHsNCiAgbWFyZ2luLXRvcDogMmVtOw0KfQ0KLmNhcmQgbGFiZWw6Zmlyc3Qtb2YtdHlwZSB7DQogIG1hcmdpbi10b3A6IDFlbTsNCn0="
+ webUI["html/js/configuration_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbl90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NvbmZpZ3VyYXRpb25fdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxjQUFjO0lBQXBCO1FBQ0UsZUFBVSxHQUFHLFNBQVMsQ0FBQTtJQU94QixDQUFDO0lBTEMsc0JBQXNCLENBQUMsS0FBWTtRQUNqQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVyxTQUFRLGNBQWM7SUFJckMsWUFBWSxHQUFVLEVBQUUsUUFBZTtRQUNyQyxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ2xCLElBQUksT0FBTyxHQUFnQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzdDLElBQUksV0FBa0IsQ0FBQTtRQUV0QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNsRCxHQUFHLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUNsQixHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpCLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtnQkFDdEIs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"
+ webUI["html/js/logs_ts.js"] = "Y2xhc3MgTG9nIHsKICAgIGNyZWF0ZUxvZyhlbnRyeSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIldBUk5JTkciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJ3YXJuaW5nTXNnIjsKICAgICAgICB9CiAgICAgICAgaWYgKGVudHJ5LmluZGV4T2YoIkVSUk9SIikgIT0gLTEpIHsKICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3JNc2ciOwogICAgICAgIH0KICAgICAgICBpZiAoZW50cnkuaW5kZXhPZigiREVCVUciKSAhPSAtMSkgewogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJkZWJ1Z01zZyI7CiAgICAgICAgfQogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZW50cnk7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9Cn0KZnVuY3Rpb24gc2hvd0xvZ3MoYm90dG9tKSB7CiAgICB2YXIgbG9nID0gbmV3IExvZygpOwogICAgdmFyIGxvZ3MgPSBTRVJWRVJbImxvZyJdWyJsb2ciXTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudF9sb2ciKTsKICAgIGRpdi5pbm5lckhUTUwgPSAiIjsKICAgIHZhciBrZXlzID0gZ2V0T2JqS2V5cyhsb2dzKTsKICAgIGtleXMuZm9yRWFjaChsb2dJRCA9PiB7CiAgICAgICAgdmFyIGVudHJ5ID0gbG9nLmNyZWF0ZUxvZyhsb2dzW2xvZ0lEXSk7CiAgICAgICAgZGl2LmFwcGVuZChlbnRyeSk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGlmIChib3R0b20gPT0gdHJ1ZSkgewogICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJib3gtd3JhcHBlciIpOwogICAgICAgICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IHdyYXBwZXIuc2Nyb2xsSGVpZ2h0OwogICAgICAgIH0KICAgIH0sIDEwKTsKfQpmdW5jdGlvbiByZXNldExvZ3MoKSB7CiAgICB2YXIgY21kID0gInJlc2V0TG9ncyI7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1sb2dzX3RzLmpzLm1hcA=="
+ webUI["html/create-first-user.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KCiAgPGRpdiBpZD0iYm94Ij4KCiAgICA8ZGl2IGlkPSJoZWFkbGluZSI+CiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj57ey5hY2NvdW50LmhlYWRsaW5lfX08L2gxPgogICAgPC9kaXY+CgogICAgPHAgaWQ9ImVyciIgY2xhc3M9ImVycm9yTXNnIGNlbnRlciI+PC9wPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgoKICAgICAgPGZvcm0gaWQ9ImF1dGhlbnRpY2F0aW9uIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KCiAgICAgICAgPGg1Pnt7LmFjY291bnQudXNlcm5hbWUudGl0bGV9fTo8L2g1PgogICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPgogICAgICAgIDxoNT57ey5hY2NvdW50LnBhc3N3b3JkLnRpdGxlfX06PC9oNT4KICAgICAgICA8aW5wdXQgaWQ9InBhc3N3b3JkIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgdmFsdWU9IiI+CiAgICAgICAgPGg1Pnt7LmFjY291bnQuY29uZmlybS50aXRsZX19OjwvaDU+CiAgICAgICAgPGlucHV0IGlkPSJjb25maXJtIiB0eXBlPSJwYXNzd29yZCIgbmFtZT0iY29uZmlybSIgcGxhY2Vob2xkZXI9IkNvbmZpcm0iIHZhbHVlPSIiPgoKICAgICAgPC9mb3JtPgoKICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPgogICAgICA8aW5wdXQgaWQ9InN1Ym1pdCIgY2xhc3M9IiIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0ie3suYnV0dG9uLmNyYWV0ZUFjY291bnR9fSIgb25jbGljaz0iamF2YXNjcmlwdDogbG9naW4oKTsiPgogICAgPC9kaXY+CgoKICA8L2Rpdj4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9hdXRoZW50aWNhdGlvbl90cy5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4="
+ webUI["html/img/BC-QR.png"] = "iVBORw0KGgoAAAANSUhEUgAAALoAAADCCAYAAAD+f9hdAAABWGlDQ1BJQ0MgUHJvZmlsZQAAGJVlkL9LQlEUx79KEZlJUUtQcKEhg4qwITAa1EKSBjEDLRqez+eP0NflvSvm3NIf0d5aYwS1NAQtQRAtQS3N0eD6+j5N1Dxw7vmcL9977+EAXmhSVrwTQNVUVioeFZnsgRj5wjD8CCAMj6bbMpJM7oLRqf3RfIXHrS/L7lszi4FGYvvjyHccm1v4bDqD/r4YzRu2zvrNVLq0FODJk+frSrp8Tp62OBT5wuVim69czrX5oeVJp2LkN3Iw18PFHq5Wavrfv+7EfsPc32PNMGdhI4U4ohBIw4IGk0oBBlmgjjIUSqQtkg2JCh0N9kms8Yyzq6JGz0Ao47Slxk5kwyoXS0pEuCVD7Jj6ypIIrYZCHIA7/7/Lrnb2DmzeOY5z29US98D1OuC76WrBDWByDHh8kpqltaQhprdQAH4ugfEsMPXMO4ed2X4BE0hdOlrLnMgAAADQZVhJZk1NACoAAAAIAAUBEgADAAAAAQABAAABGgAFAAAAAQAAAEoBGwAFAAAAAQAAAFIBMQACAAAAGAAAAFqHaQAEAAAAAQAAAHIAAAAAAAAASAAAAAEAAABIAAAAAUFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyAAAFkAMAAgAAABQAAAC0kBEAAgAAAAcAAADIkpEAAgAAAAQ2MzIAoAIABAAAAAEAAAC6oAMABAAAAAEAAADCAAAAADIwMjI6MDU6MTIgMTQ6NTY6NDEALTA1OjAwAABhL1DGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD82lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPGV4aWY6T2Zmc2V0VGltZU9yaWdpbmFsPi0wNTowMDwvZXhpZjpPZmZzZXRUaW1lT3JpZ2luYWw+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43ODY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ODE4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6U3Vic2VjVGltZU9yaWdpbmFsPjYzMjwvZXhpZjpTdWJzZWNUaW1lT3JpZ2luYWw+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD4yMDIyLTA1LTEyVDE0OjU2OjQxLjYzMjwvcGhvdG9zaG9wOkRhdGVDcmVhdGVkPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrFqaA/AABAAElEQVR4Ae3dB7wtSVE/8ENOoqCAAcN7KgJGUAREwCUJCvonSjIsSSSIIElEFEVQREmCIgisqIuEBUEQFVlXVMCAOayRRQUlKaIgEvb9+9vv/s7Wmztzzpx7z9146/M5p3u6q6uqq6urw/TMXOxYg8UhHGrgQq6Bi1/I63dYvUMNdA0cGvqhIVwkNHBo6BeJZj6s5KGhH9rARUIDh4Z+kWjmw0oeGvqhDVwkNHBo6BeJZj6s5KGhH9rARUIDh4Z+kWjmw0oeGvqhDVwkNLDW0A9PCFy47eCC2L57ObNyyVXNSAkXu9jFFu985zsXb3/72xeXutSlOvr5QTkXv/jFFx/5yEcWV7rSlRbXvOY1F64j76o6nZt55Pmrv/qrxQc/+MHFJS5xic76Yx/7WJf5Wte61lKXdLwfSL2Ff//3f79473vfu7jMZS6zOPvssyfJfvzjH19c/epXX3zWZ31W1xtEcpDvzDPPXPz3f//34tKXvvRKGpPEDyBD+374wx9efP7nf/7iUz/1Uzfn0JQzCk1Jx/zAy1/+cp3ofPm7933uc+yjH/1olzPy9ovzwR95vvEbv3GX3h70oActpWsGt4zvNRIawkc84hG7+E213Yte9KLOshn3MT/QDPzYN3zDN8ymMUX7oNJf97rXdTn9bdLeKz16E7bDJ3zCJ/TwRje6Ue/xej1ovJbeoCcc8J9eHa+jV//Gb/zG4sjnfM4Bc90feZ771a9+9eKrvuqrOqE3v/nN3YuG6n69eegI0fr0T//0nnSzm91s8R//8R89reIYWZqBLP7kT/5k8Ymf+Ik1q8fRuPa1r734lV/5lcUtb3nLPjooo62VO7eAHPkZfdSrGfni8pe//J5EmGXoGIG/+7u/60Pa//3f//Xrz/zMz+zTGUo4SFBhSv7Xf/3XRWT50i/90s7ScLZfGOuw0tKxhvTJosaZcKzC/d///d9e3JQisksTRz/hKhpDA4NLJ8oPITw+9KEPLf7zP/9zF84lL3nJpRxDuqGlLPi3f/u3PvUSN2011cEX/4ME9dKupsyBi+9M/aZkDt5UOMvQU9ic7bKXveyCoaswwzu34XKXu9yCoWTOS479QIxmEzpjBjYlQ+gyFEYGhJE/aVPlpW/CLx3/j/7oj5YGPUU7I/MwPzJHRm2O7llnnTVEPdBrcpCBnJcY6dSbMN/I0BlFenPCTZhtA9cCdJtAmbxEPGEaWf0YYa7DUzpcYfLENcg6g4QHNFxbV3T86tGnaMDvZZusF2s0UMErhtiJ7vyl4xw9enTxD//wDzVrV3ydvCmwbZ2H7rpQndMu63DX5W9s6ObrH/jABzrdP/iDP1hc5SpX6Y2WRl/HcNN8Rmgk4cV/6qd+avHsZz97cY1rXGMr80VKZCymFaeeemo37G7cTcj/anW8733vu/i8z/u8zkv9/N7//vcvnv/85y/+53/+Z2F0Uf5f/uVfFve4xz0WN7jBDXr1NNBQH9LMmcFv//Zv9zr1i/bH4Ewz8FO3btQtHQ31fu5zn9v50oM8OyI3vvGNF7e97W1P6HDGtm/91m9d3OEOd+h1CZ3wqSG9fsqnfEpPwn9sSnB2049dDh2mLXIX3/7t395lgjusX6W9nzja9PpP//RPi7Yo7no2Px+TbxM+Gxt6PAYmX/RFX7TnxcEmQgb30z7t03pUZ5sadoM7J6Q8hvq+971v8UM/9EO7itzpTnfqaTEYjWsIf+QjH7kL9yY3uclaQ+fFLQDPOOOM/hsSCT/peOKnng996EOHqIsf/uEf3mXorUCfR+9CXpEQPmMobc9tcYUrXKFnfcZnfEbvhGN4B5FmezTb2RagaYO98trI0DGpDHk1QmiMg+rhvG48ehbB0rbBLzQoFdhTtpsj/Q//8A+XXtd1cHX0r/3ar1383u/93uLLv/zLu/ex+xODQCe44kMwGl75yldeWMjTpbrpbJVfLcPb3v72t1/8zu/8zuKzP/uze5k//dM/XXrjKptyOq/fKhlCH8666UumDnQfvc+lHz6bhGlv9x7a/mEvGr6b0BnibmzolYAGAtXLa7wop+JuEqf8NEAaDK+aVjvcGO00+DAPndBMXmjpsLURM2qkI/MwvPK73vWufhPon//5n7vRohNc8boj43oIVUeVXy84RG7X8Bka3Cor1MiWYupX20N65Rc84VAPNS/x4NB92jvtACd6hhfZUnZuWNsk/DqvRhMkbS69Mbx9GXoIqmAqKhwqOnibhKG5SZngKqsxaoMkTzikzXiB7TS/gN0GwOsGeO5cGwmyGzC3MYyA5vl+Q/jox47LUdPJ+sY2pzd6/tmf/dkyK84kw/syo0Vq/RKfapPk1/Lr4rXMKj2vo1PzK82avq34Vgw9wmhse7CMRY8k/KbAQ3zSJ31SX+TupTx+5DDvtsBLA1tYXaJNOyxsGGpVrHmzhSCjiREzRPUgi3k5mgzb3m72mS0Ur3jFK86uIqNQ9nrXu97yBhK60v/93/99kRtzlaCO9KAHP3jxnve8p/OXl9vzRpR49NTHOsZiLrpD32hQ96TRoGdTqE/+5E9e4krfFMj1X//1X13P4bkJDWW0SZV5k/Jzcbdm6FH0WW2v1SLV7oHdjE0g+7UvfOELFyeffPLCYmjTXfLI8au/+qt9B+ILvuAL+s6FnZGv/uqvXrz0pS9dWFjxiOkE7gTa0QnonpdsHfWJT3xivztoPj28Z8CA0MwCOWWnQsZsh+rd7353X0Q+9rGP7Z2HHPJApgZo+wEG8P3f//09nj8d8i1vecvic9pd4S9o53w+3Docowd0bqeEHvzQxPNzP/dzez56Oig47bTTFne84x270feEPfy14yGLBz7wgYsv+ZIvWfzFX/zFHigs+tka55V0vtR7T4RWFNqaoYcH5QLz2E0hNztUuANaOw2+Ka0M7TxltkMN/5Gv0mNoMbaaHqUPjRwO/PCoZVbFw0MHy5QjnW2yXKt/cCtO0v6jjVwOcQXG6lfTYuTwN5U/PGqYtYnRc69Q5dsrjXXltm7oMQ4e5B3veEc3rKRVYXp32OkU0hkBj84zVc9Wy2wSjwGRww2Pv/7rv+7D9Jgs6A6VDS9yfOEXfmGfWjAuDTs2v54jW3joyOJ4VC+2iWxxBnZi7BQ5JQnGaNQ0owCHwhGlfnNkn8JJhzNKMvZsBeKZNk7cGJV6a29ro7HzOFO89pO+dUOPMOaF5m9zgTLMh0EMYm7ZMbzQIEdGCopN+jBcRQPuci7cEK/U5rYaDe00dC0/Z7pVja/GI9cJ9JpugLzgJpQWo69lpuJw44WncDZJD2/OxJag3xzQybYxoszhBefADB1xjTHWcPKGoIdnaB/m7fc6dCk3e+Yx0BjMGA+GDP7mb/5mLLunvelNb+phcF1Ug+yZM/5SZpU8lUyM1SnECjG8qTTrikAcQK73Eg47NV2PyTCkDe9CY+hzjXyohG1eU2jmsHZRXvWqV/VVvrnqqqGbIV3nOtfpdzA1yJQBos+LWdAGpnCTPwxj5H/5l3+58DOFQwNfHdINqnTQlD3azrI4tprdish4tatdraMoHznsrLzhDW9YposY3RxvAHONsyNfQP8O1KOfH3SisW1/2QZ0zNg24lxgdHaQ5kIMNgY2p1zKwP393//9UfkspquhK2Nefpvb3GaURaUpru43v/nN1+KOIlxIEi/0hq6hgb1n3tG2J4+Z4ZVRwnGdOC/J6HJqj/fj9VaBsutwxsrXTpE1yvWvf/0+2tgW/PzmdYNTQzLHi1e6ZAiedPHUr+Ilby8yD+lcEK4v9IaeRtegDNbuyxB4Sw8VAAafzhE8NEInacNwXX7Fj5GSibEKTaPSschIJje93ERKp4xhK49fdpYqbbjptDV9TL6xtFrmwhS/0Bv6cX9+zk6Oxk0DMwjDOm/vWOgQsmAdM6gh7pzr8EUv64PwUD53ZR0zSLq0TFtSZhWvTT10Os0qmheGvAu9oQ8bScP6AcbEyO1FO7nIEBm/qc3pp5/eF5kWpW7bTxlQyjDGGOqY8UjjkYGFsJtXF2/8Praz0MVTGsAz/IxC9u0dU0h50l+qdRZlhoC28ulUw/x6Td7IXNMvjPGLnKFrREbA8Cw0HXn99vvdb3Gve9+7G1eMhKG95CUvWTzrWc/qr6dIejpJaLhBgobb9F/zNV8zaSPKmYoAxxPE00mEvHymVQw7hv62t71t4biAjoQGXPcnnF2/613v2tMclXAmRr4jDm7tu1Fmy9P2X0Y1vLvcLXxfu5t6//vff3GLW9xi2YHkX1hhe4beGqAChaaxavpUHK4yBw14mAIwXItOcNW2JefO3hAY3C/8wi8Mk0evnfcIxCBzLcQ3UyV738P97+Dy3HZZeG9y2jHyRNMQnIVfQjNwILCz5An+OeCc+75hp83SdsI57T4HZ9+yFQLbM3RabpXUyMCQq2HnAtycSZlbZg5euo4GIJsfIwe5yfO/7Za4tHQAuOKZGnhVBdmGjcMYLWJf//rXLzsNuml08eggJx5NlSww7f6AdApl7LI4V5PyMXYjD3mkk8GDz17cFAh+y+7HHKQbXdw/qDLjZeRA1wEso9F+AU2gvQHacyC6n4O7DZztGfqONFGsMxW1MdYJq7E0pveeZCG2rsyc/DQEg0PXjR0N7K4gL/7Hf/zHi8u1uW4WnMIYTk1TNnULX/IGJ2WSlzBPHjndp3GVMRef8ujoRGY0GM6f//mfh9xSttzV1EHVzVybsaUsPtKGcklPPYZ5SyYbRDLHd8JTHP05gDe56X8bcqzjuXVDT8/+zd/8zXW8J/NzaEqj7VcJKc+LMrBqNObWIHdOxStPJx+Bx9imIDSykIRXaeRJfI/eVchujzSGp0x+FU9cHeSZapmr00+mXdUpMDQjBrCYXgfBXYe3Kj/rjl/7tV9bhbYyLzazEmmfmVsz9BgUL/64xz2uH+qfO4ylDmhQfu5Ghmby9xIyEAbAEO2sfNu3fVs/F84jMhbG/BVf8RVL0pXnTW960z7NcCOH56x5CqDN8DzUcOTIkV00TJuc93aUAC8ezAjg5OCTn/zkPsIw8nXDOD6gGsQ//uM/9ulHvDhPSt92kDw4jZ/rocydUPtzbMG5dQAnPHrCBn/WChbLV73qVft9gCl+YyTxdO8gI/8mZcforUrbmqGHCWN6/OMfn8s9hakwI2Ac+wHlzaPtXphO2WkwzFIwb0jZ4YdPjXvdwu1ud7tZ7Gu5ZbwZ0N3udrdlebwYpIcjGDqvzvDNzeeAzuZH7qc85Sn9Nyz3t3/7twsPm8DLFGWIk+vICW9TpxQaXltn52Y/EDm30d5Tcmzd0CkvCpxiem6nRx5h5tSMZZ2s6/Ln1CONWHEz3aj0xae8qrwKQ7xaNvVLWMsdRLzW4SDob4vmVgx9XUPsRdghzb3QSJkYhpCnA0LGIG2qseSZNJxoZr346N+YzJW3Qgw/MtSpSPDGCA/zlDdl8miekcnjfHZR8I9nhjNnYTgm85gMNa2WGcpW8ebGK725ZTbF25ehp5KmB9sWttJmHK6TlnDTypIxHlY8v0q70uz5NWEnvhf+aA3L5aWdpjCM0hM6eZtX8Mlr3h25iSDPHNsTXCAPVaMvD8BP3PWQt7Q5kHLC0N92e4cHedAme02bI+c6nI0NvSqPVwG1EdYx3DQ/QzBeieMXz7UpvSF+Gm+Ynuuan3jVQfCmwoqbeOox9kCHhZldFbyywDyrPXA+Bs6Zr3sUbZ3MyR+jLy1tS+bIn7SpMvtJj25sIGQk7XybPvYDGxm6CubGB6beCVjPYOxHkLGyKqiHq7wh2h478FwpL7dfiPdwoMttefWLonlMt9nxiQcjjzuVbrHTg86njFvyzobbXQHVeF75ylf2twW4+SRdB7WPf0Z7LR1DRhtcpjXsr7YHKbwaL4tUHt7OiPdN2o9Xlgzm+KYq3oVo8T8FqZ8tQEcDAHnJYdfJa/TsOEWGIR3y5cFwW6x15BjibuuabIzcbtgHm46BuE69H9jI0M1WsxVG4V48eW6Dd5HwYnZQ9gPpRBredt93fud37iJne5GhUz5QxqGp+9znPrtw3ekcGrpyL3vZyxYvfvGLT8B/zGMeszj55JNPSHPxjp33gdsa1NgMXX1v3h6aSAdModzVlF/38JMvjNzy6xGF4PziL/5iN/TgJT2h+tK17VVPZvmd20APnApZ9gMbGfrZZ3982fsphxHwLlOK2o9gKYs2Y+R17FdrfLBNntkF4XU9XoYfjxnjouQoWp4O8MY3vrEbCU8rnuMCZAuuuJfzAHdGyeypJUbKO6Nl0SjkPevdTmlAvobOyIm2vODOmcLBv2K7YXbZ1oG8QdfoaBTToVZBdGwUI/Pcd9isorkuL+3NoRpNyAoiy7ryU/mzDD1Kt8rXuwlB4YyPILVhpxjtJ11j48FohPhnGGUgc4GyMkwnVDZxxlN3K6Jc+fhmqhHjEqbslAzZWTH8VnqRWxj9pWN5TE66KZF6Rv/C4CYt11P8k96nAa0OZFbHVRA58HbPIc5sXblVNDfJw0f9jhw50utLhzlKMbe+Q36zDD29Ku8OGRI5L67zirU5B8FiFMIsoOPFyZ6GFXfDJZD0hNINpbmdn9v/0qMjcQadBkmIRgwdTqDiZlpYF6nmxmPlUn5OqDP6uetcb/tXmSudjJpZE9W88yqetUIcx6ZyzDJ0vYk3N2TP8WKbCrEpvkYzsvzu7/5u9zgxpjE68tKgQnchDcMWm4DX0lmc9jOUm4Io4xa7Idv81rxcmk7iXIxz4Lyt+TF8c92MMGhOyTNmsBXX9MSodcMb3rDTwNtT/emoaO8FdGqL5dRBG6qfRe8Q4Bw9erRPS73CT8eoMg7xz41rerMb5ch01iab8p009Fo5x1R5GQofa6xNmW4Dn3wMnofNNEDaUD5peZeJt9Her+1UXKEZOqM3X7Ur8oxnPGPxile8otfPsKkMmt7HeOc733m5yDSitc8p9lvvmcLBe9rTnrYcWvdSN/yA2+kOnbn2Uxfhurn0FM984EpnGZ6rRztGo10jA17f9V3f1Rev57f2fupTnzrLoYzpY9LQgxyFRClJv6CEaUDemGd+884Lh8ifxZUGHdu+0pHMrevJPLsQ5tA62BSE51T+WDo9GzkzFx3DadY4mjyVCBtd06Z8xmWIK38p705cJz4/wwkyzxR0raFTggb3O1+BRt9pmHj0MfmygMr81yNmphsWnoZohqyOhnMGXz166H7lV35lJ+2rFIZ7HYahGxXgULyyfmAvDTHUs+vQiRzqu7Gx79BRvw7tOh2gypw8IVy8Oy/heQVN1l7nxj/62CXzTNnWGjo6mOTnuiuhhcsGkLgD8nSKCNYiS2F7HF6UV/Nacm+AHToJ0AFp9K72Vr7Tb+nJ70jlLwtIuwaGY/NUhmn6kQWNOTaIvGjVX4zDwjd8YtzKqX90QL7gy4NfHUR0Jm8Kphqx0lUWz6QN6cYhyU8eWaKPKd41PXUV0ndvAfGq9xZP3rGWd7yVGnJN3yGadu30Wn5Tzjk20HDUOzx3imw9WGvoqVwadChB8qUnPoU7LHuQ13l4Y+wBEAZuZyHTj9zhJE81iOzQCNUNjDXIVL01YHiIxzg7oQ3+xvSZqaQ8tANJr7tKyVsXph6V3roy28oP723RG9JZaehh/va3v71vu6Xhk+6NUnWhxAjMYd/61rf2HYp4lyHTbVxrYNMPB/59RVrjkCvg1vYzn/nMvjvDCzM4OwgvetGLFvlsZJ4schPHJxHJzxiF6J955pmdnF0ZOyJjEF1Y8Nqa1FHSGeQ5Bw/c9Kk3lcZo1bTQNfqQVx1ClxG7oQV06EzLXKuH6ZnpFVmUN+f2gMQqA678LIi1o/Y+yDYkL/rXve51+w6Wtxl4BciBQKvgKDQB2kfBGusG7dYvC9r1a1tsPb/itgbYhTdWdltp7dOEx1pjLuXokcFfM96e0rYLj7XvcHb5vuzLvqyHzYBXyts6cs9vd0x7eK973etY6zCdXpvPH/MDbcE6Sad1sja6X+xY2zrsOD/4gz/Yy/iLbMuEnUjS8Wp3oEdpt/XCMr11zGPNkJfXVb/3vOc9lzoa8sl16tG2NI+1p7BG6VSa24y313x0MSJDZNpmeM6Y1ySfggznPFJdvcfD9HI7PTFpvMpBQh63qyPKFL94soQVj6ddBbnVvgpHnhEgMJw2VG8cnHVh9Ajv6NGjo+iRHS7P2AzjBDxHNEDd4z8BYeIi+Ne61rUmMLabPNYu2+Uw8/3oUbqn5hm9GxlRxlIgSm4KD67hMtt3S5xBRMOkgVJOmoqPVT64GjjbcOmEA9K90dFC13QEXvMYy6EYLSCNkWZ7MWXkuWHESOdA5CeXepsmqYOTg6YPyQ+tyidpNaz5mfLQP3nQpQPtAOAG6N2UQwfNNmHteJVuygzD6NQOE72Y9ikXnVV8sozVLW01zEtZ5ejFFOncgJVz9AgQYRk3JVA4QccgSjdHtHW3ChgYbyVMObwY2FhZR1Kz1xxPDj9lE+IpPXJHVmGMxoLUAS5GoFwtm/LmvnMNPeXdcTVvztPxq+pf81K+piVORnVhuDotcKcw9QueMHTgZWGa+gcvOK7HaMSgdZYYIqPPAbXQaYUX724nP7PwTzp+R44c6bpFa4wHHDKGvrKRK2Ho1XCMVs2fis8y9Azf9VURCEaBlXmGcHnSh0InjaHqDHkdxFBAniRK0NCUkjuccM/aeRhBp4gHijxDWrmm9Hwpz4nDOaCBeedNIDqYKhPdyI/MVYfSc43Wa17zGkkrv7zREQZ/bvOD+r2i0B2gjl4GNw+DTOkh+YhwhkaasZe2jjJpieETveV6Cn8v6ZOGjlmM9EY3ulF/4Q6DkkYg3u55z3teN4KkC3PYKh/qqkKFprPkdnKcv3jCE57QvbQpBDBMOsPihf0eOrDjkafknYf24SxeEy3emcF7vQaZYkDvb1uH97jnPfv3PKtHMRp4WCQ7EqlflVE8dXzOc56z+Mmf/Mk+FYmXG+LOvVY+Hff17ZPq8cx49YZtYYt0cklL6EYV76xMx53JFE/6ZOjeDRkdSWeMXkl34xvfeHRKggU8ay1G2xb9/Rw+/tKF9H3qqaf2z1RqK6Ofh2K8FeDxj398P6dD1zHgodhoqNNrX/vaxc/93M/19ux1hEgXOzqhB23NZrzFYXjuf0h37HrS0I/zOm7szkrkkyGVCOXF29R0BsXTTkGGVAtbW0tDRcSweYc6dbAANd2oQFm3vvWta1KP33znFQyUpEGERgavgpgLeWe60Uf5/YDynANab2wnEv3mggc1GOxegcc96aSTdhX3YV8wVTcGnbWYaeMXf/EX76KRB2C0eUZW7dp2tUYPje0i0BJe8IIX9PNGY3nDNE997QVWGjqCDKkqQuUZpulMFnDuPrqGqzGnjs6GDhpA74XP8JPGKGPc0lIGPlzA+0tnuBY0gaM7uxP2ruVVIBuo9Gp+jcMhR0aZOWWG5et1jfNwZGN8AO3IFjz1NmUyWjnJqN4MXfoQN2XGQvplfNEnHDsxZHD6ck7nSbvQc2SVRj8g+pcWXHzZgzrITwfoBXb+omNlsm7ycAqvPbxBp/46mQ+jjdGqdKfiaw1dQcpNY48pWqXjlXksvymg9OSnTHDHaCdvThjlr8KdwyM4oZcRCN2hzOGVMnA1MEj54Ajh0QFDWwWhF0NK2VVlhjihkVA+mYZyxYDlxwDFGWBwhaGTEE7yKy4dBUfoF/tRBiT/+NXxf7SUDc3kDeklfZNwraEbsPnCCJaQN8j0JJ/nnss4B/uVj1eplYs3xiv80E567dU1nsUX3Hhj8U0hDc/zgby3XNw8e9ho0sPPtt+chZh6V0+LBlDf8M91dFR10ZEn/mp5KFVeo8QQqg7xyv68F4AGootcJ8xGhXVEQPsO22pKdu2ekdox6inIwy7R8xTeVPpaQ2fkFn8WL4SiND1MBc2XvbLNPK4qc4qZdHiGJttvFjA+iWh+lwrIy6153izpypq72+LK/rFyDM+iiiJ5FaGdlXhV5TaFNIptVA8fHN2ZEunQ1gm1U4Y2WTy84UgCYyF36AQnutPB89YBOIb6QPSYNJ2BjhxBGKO5LNci2soWZDpG8hiyd0DiJc90gS7R/kDbUfrfnZtmdE826zEP2Rw5cqS3NQPctbW4Q9y75U0rnPAkH1ndaLIABjoIexkD8pDFNO5Wt7pVX/Qz+jG9qb9nBuroOkZzKu1iTbGjq6wkY+o89td93dctrt12PAj93jbsUordEUphkEPhphhK14imL3ZmPK3jC3AWiSrJiBiyoT00IwtlK0d5R1sjvKm9/uJ7v/d7F49+9KO7PDEE+Bo0XmWVLKvyyBOa8NAlXzpULUsHDCcy17yUFdKbMzTmo/byGeGqaQx+FsX0jj9jdlqwXXRe5NO5vIaawXh3OgfEgNIhxeN5O41Wnm58MMDizq4aZ8agbQ7YSdEe0sKXnGQfQtWRdmWI2vUhD3lIf2uADmAnDj+8gTpcrNULPufhkUSdxUgy1SmUU36v7brWo2MQ7/I37WtpGjIC85oY++0FjARpZF9qqKDC4Zt03iJQPXYOXI01RPD3EqI3i2ZrAA05t2NlJ4MupzpG5GWk9f5B0muYGzZCB6OGwODHPGHqZlTMM5kW8uRTpup4SDPXYzpSPlMdnj1vFEuZYWg01N5z+A3Lzr2eZejpZfawxU0tNKreDKrXm8OYAescPCBvZE7Lg/A6FMyjh4dOlY7lyR7eFJ5yOgd50EGvyoHOOiNaJysj8wsdcohHH8vyO50f7jpQNgtMMvqBOk8ODfzkG8mUix6SL6RLz/PGo4+d/lMustU6xJEoT68865E2Un6kjU6AnOGr3pG1Z+78oRua6LEL7ZGO5TiEdokTiC7Rgm+XJfpQbpdud/goh49yoVHlWBefZeghQliCmD5gGKESwlslRBQiBGhkvq3nZ3FrH9ZcmCIqPeVSNoaBhh8gR8Xvifv4Q6vWbRWpTXBDM+9eNOVYJXeMdIw/HdEFw4pxDfHQjo7khVfSlI8h9jbe0WfV7ZBmrkPDddpG/RgtcDc1NxFtR5vqwiND6hUaQmU7nZZvirMtmGXoWYUPV8WZskRx64QKXozUsJd4FK3RLVTXnRXJzkadzqzjv2l+5N203BR+GvijzcOBoT6nys1N1068J4jRhedYXWJoZ5xxRi/jz+5JaCwTN4yEp2Lp1AzcAjh3hyvJ2EDCMVkr/l7ik4aOWZTFu3qlA0/eK9F63kdbjz39DW9YXKpNGVIxvdhOhQcyQNLFNapzLeZjhipGbn6eipvTGT7NMx/0oAf14wGZyig/BEqxWHKzKh5hiLPfa41ufpm5rKmaBaS3IujkDGUvvK/SRiyfdkznjp73Ki8ZMm3LMWppkc9Imc/TaNe0rY7x8pe/vNdBmnZRr9wIlLYXqKWMOO6qWmc8+MEP7m86IFdsg9we1DENhatjaHfTVHaknVOPvciyLNMYroTjj17sRmlCHTvppJPMQU74ffd3f3dHbsItH0qQ8BM/8RMn4NVyrcH7QwNNwR2nPQW0m+G5mEJ28KhHPWqXzO2VFMfand+e3xqph+e3v8gf+c4666xd9aD/9uLRSdGn2n2yQMsIv3ai8dhtb3vbzrOtvY61nZceb6/cGC3+gAc8YJd8HnBpzq/jh+5o4ZmJxye3S7PfHam9U26j25Ea8+WLPo8ePbo4cuRIT+fxxiA7DTe4wQ364skCy4IynqR6Dz0YJByjd5BpkSV1MaL5AfVM/kHKsB/aQ/ky6vCODmkZdUGmCmN6Hrb7RvJc7MTSoc9jj0HOzXsk0hkZwDa2CZNTl8qEcROWAoUUROgIbkhPB0i5obKTLhzi1jzxKcXoYlS4DHcWNat4oVdhDHcoj+sM/cpmV0A8sonPgSFtZcbSKi355Ew9a17Kyx+ry1haynNOpgVZc6X9pGvT8B2jvU7myNXDZiPpXH1x26YjJ+Tv2FN0HNrhD3dVPTqxDf9mGTqmWVRk+yrX+JkrxwASTsmhMnDyG8OLkvBIfAxvW2lDpQ6vs42K37r6DWUa0pI/ljYsd1DXjDz77tEtI098iu8cmUNDmDjafiBpaMV+hJV2NfopWfaSPsvQMY8AGprgvEHSUgECVKGrQDEWT7QPQWVDS16MKR5niL+f6ypr6NT6JQ1eZOp1ao0DpuqXcsNwjPYQZy/X5NhUFnzUSzlyTel5VEetbHtafqWo2kvZjze8HLWuO0vZcgzv6DgjTN5sgAnnuU2YNPTayA7UeADB3C7KMdzlbav2wod7uMpXhd397ndf+JyhTqKsd3X/W7s1LN1rImwrxtN4T6BKmzLspTGHCjJ8OmhkXeC9gra60ol0Moe2nv70p/ddEDssabDUz13DPGg8pL3qmg6e9axn9Zs59TG4VWVW5cW439du2H3j//t/i7vc5S4ndsZVhXfyTF3Sts9//vN7G3JCdrzszpCzbSgs2xouHZ3Z3r3pk4+5ixk7qCzpGQ07Jj/zMz/T59n4AfZhF+s+7SMKaLANNOy2nXzyyf0oh3i1j2xfVzuq/DaKt4qMQhNi7esuGqNjTbC+Y9IUZEp5rH2apNOr5UcZtMS2V34sr51od+d6+abwHqK17R8ebZuri9M60fIVEM2gJ3lFnnZ+pOMMX3cxVTfpdAB/2/VArxldZ71Kz82hdJx2nmQpQ+qTcEy2do+il1OenkAbiZc0xsrUNDtTzWn1cvWvvXNmlEbbdq5oBxKf9OhN8CXoqeDIkSMnLGZ4ct5Zj58DrQbdQyuj5/LYraF6UXmAB9CTeYCk9Yz2N+Xdh3jBFxouj7ZdIV7bwaEx71Dl98SMm1XkU794pEpzk3jO4aBrVBnjH3pT9Ui9tQO53CRrhppiG4X4oxcvTs+mDg6CeV3fta997VE9Vx25ra9M5BLyxk4tmqrYrdK2QFsDcqetXbv/4R4KOsGJXUQPoQ9/vzDL0MOY0Wh4TxBRWBV8nSDHzXgd1vF8SsIDX5UNf0Oexg5fMsDNfK7iouQabpRuShJaU5KoIwPftH5T9Oamk5WxMEC8QervsNOwbqvoplzqmlAZhh3H5Tq6FAcV93jK8f+aTk7tQyYQPcdghzSPUzjxXz0zN09OpSet8hzi5HpuOMvQQwzjVCJh8taFXSU7itG7AYUPKycdn1RSyJvgxwDHIIYxlCk0Ko80cmRAr8ZDf0gr6ZuGDAI4vDQH4mHhprPlDFAtv2qkSX1Tr9RZ+Zz1r7TE8zUTR4hTrnrxSiN6TRha4Uvu4IcWnBoflg0NoTy0Qq/m7TW+kaFjslfmhimeV2X1fIvRd7bb63o2iDfoF+Uv588ltVel9cP5vC5lWDh6/4snyAHlxnv3hJ0/+IAnsrDUgP2bPo0Gb1nPy4yV3yGzp8ADyKZipjBZAI8RohevE3H2X5yxkNs04Ju/+Zt7XWMcpkCmY2PAkNXzEo3Gx+m5TXHoyPlw9UY3dGp5PHUeoQN2yrnW4d3sy8EsZabqkbbUzm750yVZ8KPn+q6eKRroszF1VxdlY3PK0EduPsKdDY3QKLQKLhej7XUEfRHRdi2OZdHZGCwXFk2By/QsRhFtxruk3XZtOn5r9GW50GjK35XWKtfT2p28ZV776kan1yq8pO29faHTVvvLeNIStgaczIOjDuGZMsKk7WUxuqz8zMgv/dIvdRnbXcFj7WRjj7eXpR5rI9lKCvQBtBn9V/nF733vey/1NUUoNJqRHmvfL+00UvfQo8NhWvISNmezi3/yhGmHitdGkS4We4kcb3vb206g0wy8X7/hDW9YVkF958JGHr0RHe3Ner3fEJpSlknZKnKb12dieAw93tA+VhYvkLDGpdX0jrjmLyMGz8prpTwPx3Nlnj8kE7yEw/z9XocuXSVe9Skt6XN4Rc+eYFJnuu6H8dYUDg9hFrqeNvKmYWujsTn1GEltSqc8uBEkdKXx7sN5+RgNafRhO9hoe81rXrNve7oHg85eYJahx2DrOfTKUNw0or7JKY0VvFRYKK/13C7vqrPYlJaGgxwaytf4WMXJ6gc38g95hyacMdDA6kUOIagGiV7kGCsvbW5+NQp8dUYgjHx0lroIE++IO39JM41LvIdNVjAlT9KFKYc3x8Dwpc01UjSi90o39dgRdW1wucYXqEv0EdnWFh4gzDL0lGG0fhplacAt07GAXEeQXKdsQl5Gz/YDjoRO4VJMzUu8GkXSQj+hdHiRR4iehV2UH9ypUHm/NBo8dMJTGPpTNNbl13J4AXQrj6QnrGWG8dSNnjOKJQ3ulDxJTwhXx4pxZ50jfR3gV53eOvyp/P/bWVupRxxjrctUubH0WYaeRUZ9ncQYMWl1CpDGkp4vpCUtuws5jw5nDOqOQxohNODXxk8+L2RKVGWptC1m7ODAn1KcoTc7Jsrmrq2hNDyrHJX+XuPR81nllRRvectblvzm0I2+6nsy62J7HQ36yKLROXEQYzdCmuZN6Wwd7U3yOZc8a5oPMii/SYer/CbfAgBJhRgDAzdXM4StqiRcBgTHcKMXMgrXr3vd6/p7Dz0+Jp0yb3KTmywe/vCH9ymGtBhqFVBZBqWCH/rQB9tU5jIdTy/XWTzM4bY+YMBo8Cbe6ejpdg0DTIEYwbOf/ezFb/3Wb/Vb+p5Ahz+sU44juH3vBgoaZIArztNcptHTGNsEMqYTpd6MX90zdOMnzQ0eOzrwgiv0LhY7S4zStQdkrtxGTQ+LrOqY6iLfNM2teg/F0C/eQu1v5waYxqVT9oQ9/LEPvABDNg9nA9Hz+1tb/X7r5LEh6WzLlzvyGjyTsXNWgZ3U9F9TxkpoCliZP8xs51b66rhx3BW2MyY9rT1k3cO2bbbc2RnSGbv2UMcY3WYgx/zktfM4PTz99NN3kWhGurwl3xZaHa8psO8kNCNefjGiPRHT8+zoDKFt7fW8MTn2m9YecB6y67fgx+i2jtxxtc+mbbSLyU7CKjr1SybZeaOzqd+YzNKCn/aSVnddiLJKjjn5O9U5IVg7dWmCLb2G3qOVe1oLW8YJHjEeQZYX/9gHhQsMnznRlp4sNCxafLXKdbyOz0u1K3E9mjfjSR04Aje72c36+0B4Fr2cZw7E08AHPD86PKV1QeUtP3zFm2YEy+FxjIY0LyryrSBeUh3jhXvhGX/koSu81cGe91vb+1gii5AskdlhuN9ob+D1pgTpvGsedxuySx2G6V2vw8TBdXAqDfrjfaNXRbK+qngDUrsu0YafMqumIF2Ohttc7JJOygt7/jJnXmStoSNTCWeo6GFjuit/J42B+gU8MeJHcWmkrOaHNBrDPiTVStU4Q0Cb0RruDePyKdEw66xKjO8E2RtOdk90GkOgRozy4aJtfu6mCWOMbKGTUDoZ1AeERr9Y8YemzpLOSSfqMITwEaLN0PBbx4dxNJd4QpuhHX1UPulQNW0YhwPC1xkVU8Q4jCG++jFi8+s4GXVAR7un7aWpTztAtkvWTrPlx9bCQxm/vcAsQ0d4LoP0QvM8FRmDLLYs8CrdGk+5pAnz6jTz8ixUgjcMK+/QgJPFmnnhujcNpJGVrzTyMYGxs/VDOaauGR4Z/WJEwcWrpmVx6GBaoHrYpAkvoXPudNCaPhZPRx7LS1o6SNYIedFR8leFqaO6cDA2HsY2H6LnIa2q82HeptezDX0dYZUh2CV3tshufvObn7BrkfIqxZue0V6xsO4bRymT8BN3pi6eK3QzIY2QfCHv6In3KS/prDTwqrSxaYd62L/97fZFjDRuL7Dzp45upDASp/V0nDkGExpw7QZlV2RdWfw854lP3oni9cmme2NgtNB5YiTqg4fF6RB4Xj/58IaABq/Mg5uu0KkbUYy2OpKUQ0Ob6IRuVCnjGh1pRlDtBk8aW+BwxtoxNLcVrtx12QsTirPrEUVP0YhSGP06XDTgo5uGmaLbcZsCL98Moe88tIQMdhRry7AawhQd/Exhhh1G2dzNnSN3pY8mI/GgiR0T26B2eEwDrGFs59lVgAdiDIyc7OHX6TSj+4QmH5AXY/VFDw/J+M4qPB7YmsY7KhmUtNDxseH2OcrF13/91/c6Jb0TbX9wTQWNYHe+8537WaPINMRVhm7gG2292uL1r399n1bqKI7v2vFqn4Ls8qY+eNBDppBjdCPPfsKtefQIwTDybpGkbSOkAArZBGqjKscYGNZGwObSU1qUsThYtB/wCjiAlp/OO4Q0OJk34afDOImY04jomlfTxRA4DvieNFoH7fUVy/n1OlzrjhwjYMBxFpya3xgM22oMZz9pWzd0wowpdUrINOhUfk3flO4Y7U1pVCOPLJvQSBmhcgw3CzkekGcboyct8o/lo5d88QCPCkyv0DdFmjIuRgjskOkY2XuXhraph/1tbzsOrrwpefAz3VM/caB+fiALd/F4dHG8xuoib1uwdUPf7TfOEXVuZSiyNvQ5FObHpsrPlQGnqQadkmKMdmgkrGV5PsbF+9nlGStf8efEY1Qfakb6sWZwIEY3VR5fBqoTVpBWZYpOEwY3ODWMF7eWiHdPfsolHNNN8sbCKTpjuEnbqqEvFdAUNwbL/LHMnbTg7KUyQ7KhNUyfe70NGUIjId7xjsMjFfH0cCp+jcsLDGZVSe6hFki5hCcgtIvs3HjP/RRYsAO4oTPsEEM962z5Woa3/AZqhxvSCM6ccFW9p8pv1dApwg0ch+6zY0EJft4gYHE3VMpQMDRsQfFwDCIeaog3da08hfKW1grr+E3RkW4hpz5ZxI3hajBzbDsimXtXnp4sshMCTzq9qNtTn/rUE3ZCzJfJHAgNwz0a6hRDE7deyRu3Vo2inV7jOwZHjx5dPOlJT+p8x9YJyqg7+a0TLKJTD3naxs6ZdU/klc6Dt3PxvR15dHl2mrR/tmalbQLRs12bTdYsSx6N4VagVbrTaatrNdj1azsKPb813CS/0GjnYnaVH6O5Ku1Vr371Wn5TgkSOsXcvTvFsL+tckmuG2OPo3O1ud9tVl+/5nu9Z4g4j4R0arQPsKk+GZqBLHtGpsj/yIz/S8dvW57H26Zwef+ADH7h8mj/8jrdWrtaH7d3po3LkQYg2Gi3lmaI29RaAKZ2Opf/6r//6knx0tUxYEdmqR2+CLS7VPBbwjkVewp0v22MZrnvmmr/cvXToy+igbKvDmlLHsy3GLMBylnlWoQFSPGd2j2wFurnFq4Cm4O5dedsjR470Q2KZh8pPeXGH2IAHTtTB+2pst4UG7xy6yqVsDR0B8BkW739Ew42jqQVmZ9b+4OEBuu4a7QqupPe8mjGIq6P5thDYCzea8PK8c9oqxSJ3eEsPjaTRGU/PPoKf8mMhHeHbzi/t4jeGP5Y2y9CnFJIGqoRjjuZ0KsLIQdIr7rq4k3eG9Cxs1uHLj+IoB0T2dQ3akcufumXO7CRffbjZTSdDujoGpxTtPIdy2MGIDGlwOPmlvDxpQjyEpk8gUxjx1E+8QtqEIQWnT70Y/Q694OMT/KQJo7MqW2QnQ053wg2PlBEO6Q55uDOus6de6KyDbAtHjnX4w/xZhl4rPCQwvI4gbhpkIQPH+Yu5EEN4T1sIrbtNP0Uzys1aQR02hSENtHgnc+xA5EuDS6+8MvfN3FS++oU2I6yQsknHM3Ejm7hOMwXpeEbCLDalRQ/hO1Veem3vlEsov47OkU1+LQdvFYRG6juFK7/qawpvXfosQ19HpObH0PMRruQlPderwhj6cFdiVZlhXgxvP0qKzAk1aobw8HMLG0RmcfhpwBib9ECM0XXFTX5NRzf8hYlX3BqPfFX/ZEAnRlnx18VTbli/lIs8wUv6ujDlEq7D32/+pKFHAA1mXnlGO5tiuAEqJf2bvumbehrcNKy7cN7VaLohPQr6nPZpbrDKo4SG8xS2vMz/Ur4XnvmHhy8ouB3Oc0TemcW73Iwih7aMTHYXHK5yh/CRj3xkn6cyIPR52KNtByOQeggf+tCHLu573/t2I6MPdL2u4jnPeU6vX/ScsgmD6xhzTjrqIGPGGn7KtsVv/6oE3ens5LOL5e5n9cpk9mCKG0vRMb2pU1vwdZ7m4q7t9devBtYph7WDqQh62tzuit0nxwqyFkmdztOwKXQUWuWXB+Bfftppoyvudr68l4ULEvaLkb91+XNojJAdTTrllFNGZW7K3ii9bWV1/Gtc4xo9vN/97rd8JcOQ8Zz6KdMMdyMZyNyM6Fgz3uVrRZ75zGd29niu46udxuqdL4u0UWD5Ogy7PG3xO4rfDHf5cAp6bUE8itc6xrE2vevyod06aI+3J7uW+NFr66TLhzHG4q3z9TL5agYagXX1Dp5w0qO3iizhijue3K1iHsUCUTj0LjxLo7lcoCwJtAjc6nlqXo3DaRVYemH0NgWeK7I5RcmjrRpJxuiTw3Fg3hfYZQA8nENdFkfi+JBROMaDV00dhBkB0OJRwdTuAxlMRdx8yVw/U5NecOev6rXyE+fZeVmfzqQXi1Q0HKMeOzuElscHeepb3fKWi3e3hThPbVMhXh2OukjzMIgz5uSzS+Ugl1Elo0eVrcbJBKKbnarsCpKvLvuBWYYe5ToPYRst56MjRBVAZVLJmj4WV35dBaIc5j5cTqYLSB/KkmsNYPiP4Y/JMZXmI1NeF63j2c6zwGMol2zTAVA7FJzoqdLDt9ZBXmRx15Dh14ewa9nE831XdHQm3wNNp8Iz9EM71wnxy1l27ZdOOyYvGmkTz8bSHTydOhDdoh/jl8foAeeQdUhCMtARcH7GNnDyeuLEHx7kyVZv6j2BPpk8y9BTmpL07m0AZanE3E6xV56rbm/vhaZ3ug93kNRFA0w1QuraeqMtjSVbja3+DF3ZGBAEccahkWOky4ItEiPVUYaw5DfMaNfZv47RjaAsd8ve2M7kV9D2jDNyho92RM/oAeDhA5ImHlndYd0UooOMbJuW38jQVSyV3JRRxY+CNJbevw2alT6Fon2d61yn32TxZJJvz+8VyKfB3Pz6opFXT2tons+UTjygnGGdPGN1lJb0oeExfEauM7T3jXfjgYu+o7U6gSkZw6s8TalWOaPKM3LWEK22Hul6c6ZdJ0TPLo63JwA4kTuh9Hh90xLHJ9yupxdgYYqW523pJB6+yt4RR/7oxoh6yimnLDvQCNrKpI0MfSWlDTIJrqKMvH16r08JVD5D5gakdqHykF6TcEp78ah3olB0f6dMM5L9gkYlN+MD4mQW/lF7uNnLQBmJTqEB7Z23W+T9O5vKzmnUyMhgGTJ6P/3TP93n0zovGgwPP8P57W9/+y6D/XzpL3jBC/oO0LDjhO5UqA7ADovXh/jWq87m47/WaHQZQ+et685LjP1tb3tbp2HX7Tu+4zs6LR5Y2/qe6Qtf+MLFa17zmu79ybeJPuA+7WlPO+F80CblzxND79pof4zktNNOy+VWQ8aW31YJTxCzvWYO71dhr503hmc0YNDqUiFTg1/+5V+uybPmvScUGFwwnmwj16zcmZQW2eDGyKUbXcjpuIS3JAxhivYQ7yCuz1ND5zHsPHgGMi8KivIYiPgqoGQ0/AK8rddBxKNRvudY9+rPqwzxyjUtfLNAdYrR6ToyeW6yyhbcOWEMSGhKwICiEzTTgW54wxv2HQ87MzpEjHAOjykcPFNX+jNS1LmxTg0iY9pMSFad07RFObhGpTPafZjoTbkxj97pNLrDVtd20iJT6LSk2XCeGjrBs+Ng3pnXvhnqGMyYMlIzZTWq+eBZ7YZFIEddowxGYX4+VF7wV4X49w6TDtd4gtCuZUNfR2OUezXwSjPx0Op12ZElMtBf5sGmL+kAwugoaaG3LkQ79MM7HciD2kaTrA28qwdfeF1Xjbi83OTCK8eJwxftWhflyHpcvS0MYg1bGTiRq2bNiZ+nhk7ACB5FWnSYm/rNBR4EUHDozC27Ci+NPIYTpQtBtuxqp5Oe3RHxgwAy1p2rrB+iEzwzzdkP/3h0C/IhcEzaS1tGH3Bi/GnjYblcr9JzcGoY3de0dfHz3NAjIGXwhG5CtPPTi9vc5jbdeEaV0HB9zUGj/mO7qfPQhz2skzG3rIoO7b2GjvvabYjR6EgeHrCbY1jGK/LZQz71xS9eXLp1ujQs48hDAknbqyxT5dC12xOwJXj06NE+hSDfZdqW8DvaDkhgU++e+jna0T5UsOxU+Pq1j0T04wXuOVifSNu0DdxP0FHoNKNC5E2Y0dsH13L0OXlzwvOVofM85njm7c5gzwEHv7Zt6BpKg/38z//84sd//MdPEOOkk05avPrVr142igaA3x5y6L8TkHcuQm9TAxijNUwjp9OUvDr6XicxBuRkRJuOMAwdXcZ117vedRdp54CcozFl3Iuho+31HHZk5oBzODF0ZdV/DpxvDJ2wBAfOoQONMpyKpHK8Kw+QKQP8zEvFtwF5NM4Lk4B3k1hYDZXrmlyRv/JmKEP8mr+NOPoxYPNhI2M8I/5GlnVvNlslR61fXxQ2ZGl+2gGEX7/Y+UvamF4qnoUr8FKp2mlTTt2sDYxW6rYXOBBDj4BVIEqZDStwQ2cYom2agDcvExmEia/iH3oVJ+ViRPI0XtJDW6h8hvkxGikDL/GKtyoe/ISVhrSko5GbNjEyuDHGKR5wx2Qf4qPVYae+w3zXaHFOPLxRxkK5Pn2VMmROPSKfzYgsYsmDBlrqtOmUK3wSHoihLxUSLhuG8eJ1kTUkkbzgyq/nLtJwwRuWn3Mdo6kvAzKChGbCVfVNXkJ8Ny0X/NQJjdQ7aaGfB0HgVJBfO4S80MgapOKviodXpZE0tBhuzkPByRftKv/ILYwcCXltuq8PuGRE2qvBb93QVYYwqXgqpxJJW6VEeenhhlzlTGgyHqCHDhyeIrhDmvHCSxrxIKHVrhuh3viUHcVXOlG8myX4WijDQ9MdxI+0xvDKZ3lTNIbTKUarPFDObwySzkOGnzqpO7lS73ju4I/RmkoLDUZFrug5YS2XtC5tk5kc6uzOKYgcCWvZ7AQlT0gv6iGetkp+risNmwBgrg3VsuJbN3TPFLaz0v3wPeVrJJW6173u1d/Dl8oMBYGbPfVXvepV3SNoiLGKwdUwhkUPRLhBZL6OD6DAN7/5zYv2tH3fJUl65YkGY7WAuvWtb7243e1u17Olh6fvmt7xjndcNghvZXfgGc94Rm8gMkhTZ+8wdPMGhIawnfnuI42FNjncWHr3zqN46jvWwdDQqQD5nvKUp/ROrTzZ1A9PILQ4i8ezWLOOMPLgzxmYDnj/IkBDOnjZy17WjyIz9Ck5OuLEH1noGZzV7mUcbbs9jgHc6la36q+78Gxtbi7RtQd4HvvYx+6aZ+fgnfMxR44c6bTYi4dWdBI2FAdR9+TTThPinZjcKj0KzSCXB/rzndFmVMfasVVa6r82F+5lK+6c1120HtvLteHtWHs6vtNqC78eTh3mD89h+LCHPWxU/vaR3aWcwzLDa6+ICKjLKmjzyFG6zWiWxZox9Tha7SmsUXwPMUSOZmS7Hj6Q196osMQJbg3bndCen9dayGvGspQjkfrgRTP8XqZ5yJW0K5918baP3mm1J8N62HZnjrUbeWG/DNtbjid5Rp72poOO85jHPGZZbhhZ10ZDfNcbeXS9s5Vp9Z6GzPecUuORzbN4Gx4X6IWVRoapHMTnydwVtW8bDzbkJp238DZYQxrvZV4XWmTIacVb3OIW3Qvzgvg2JfUQrr1f31bKXvcYn8iqnDqQ02lCh6rs6fI4vkZRb8pUT8NDAa//ICc50KhHVdEeg0wLPFrYpxY7uud9Ldxy8wbdQPbUeUGy00s9gFXx1N+Cb0rPwZ0K1dMd7czH0QHanRx0k3UOOVIfu1hGmrSXUSA3CENDOXrKlnPqr+57GX1mGbrGAR4AwCSve6gN2hHKHyX7Efz4MFoyd6LKG4qcYvSAQ+aMykUJ4hWUiTKkk60bdkunjKVMO+UMh9WocugfjSHtlYPY3gAAGetJREFUykccLTjC0E2ahpAXI4286EqjJ2FkFfdTRiN7PfRcQCN0lEHH00FoJE4H6MahuE796CWQeriO/GjU9OCuC6OLVXgVJ+f4bdNqt1qn4EWOhGjX+Cpeq/LO0cAKrMyzMh8L6tkf3+2JYqzDQ/sf/eg5C7Bl+aZgXhnwDJtADuLzJmlQ5cWrYjQ4cNeUZ6tG79AV0NHGoHqPdHZeytFb4DhqIDzhBVdoqxN4dO3cgOifHqpewjtpRkJOwG+/YESkw9Rbx8oJyHQ8PC7XdBfIUY84hMjlGiiXUbLSkAc3+nY9B2YZuuHtW77lW/rCDwPKJNClLn3ciDAKYxW0iHMTgKfg+Xg7ig1eKqUCXlBvUcYbzfUs8CxuTIncZAjvzmDwF16M3JTI+W0NQy6yOjOeR8AGRXvnU04D4kleRwK8BcDUwLU8ndSodVZbkMHzSwP6KoaX4m9SP2NY+0IDpZ4jUr0ucfXTmTkjPHXEVRBDMrXwRgPTL3Xp6YXuKhoxNHo3hTujnUzEN4fLTD85ERsFme7S9dvKORk8AV1ViFOlZzTQhavzsDttWI8M17Kr4rO+eIGB39CgNN4wzXDEiE5Ibwq8dJujpcdHIJXMFOAE/CCsCSkcTfO/QBrB7Xs7IaZbGoAROlpgF8RdNgbMQMhAidVrhMaP/diPLR796Ef3sy3SDLn3vve9Fz/6oz/aO0vmxhrRXN8rHj6jdfBPatuR6mPUMYL4mBjcGFlkPYgwnQ9tbUE/dm5MDYFObn6vPqeeeuri7ne/e9fFsG068sSfsuqijl7bYXfEK/fyuRo7S5/ejDz6RQZ9nctpx1WAJvoc2dW8Ea3xYXvazBl3ncr6D8CbazdrPTpiBPabAyo05VWGglGWCh00pBEZtLkt5WSEWcU7C2QPIwd4HDTq8Cwvne2dzbv7BQy/+GcYTvpBhkM9V17VMNJOOupeIe1HH4AeOC+dawzYkRGejAEyRS6OhwOl57c35xTIIjtroaTPDdcaOgEIVQUL8TEPRfwsOoInrJWp6cOhq+bNjY/KsaNIiqF4IB4vnOEwRlFpROkxhHrWJbsAfReheRpQPZeFOq+JHo/OGwG8K4+eeAB/U3oeYxXZoosxnLG0qrPQSDvSNaM3bal6UXejqCnJEIb2lTYyCnES5DMqWvelQw1prLtea+gIDAUJ0bpqTtpUiMZBQIxySDsjkF0dRmbR5QmcKIoCY3hkq3VxDS8yM/jwqenJr7ydzdYZKu3kj+Enb1WYEWkVzl7yImPVBTqMdiir+ge/8hpLoyOjnmlUOgAeaMbQ0QsPO2F0FtzQdw1P2/DyIO0QnLnhWkMnzFhl5jI4r/DMQ4E5XcBLeXwZDUTJQsobMyYeCNTdJseCMw2p8/o0QHZyesH2Nxzak35+CKsOyBNdbNLeoZH62E2xGM2uWNITmjKaEsaoOZG6Exa8YejuN8hidZi/7nrS0Lv/3TECgtgeI9SwYusYHEQ+GXgNCnPT48Y3vnHvjGkoPL1b/SUveclyvWD4Y3QaAmhMyhby9rYKxeN5eBHvI3f2PJ6FMRuaPdEebyUtOnF0ISDdsO7JedOc0Ej+ulB5MuDjIZSsAdaV20s+XtEFPbklbycpI9kHW4f/3DZ18El4UPWcfSFpRkyHytwcs9Pkmr7koWWH5vu+7/s6Ddc2Cfw4H4vNVQt27WKeXnfIyD0bmhCj0Cq+PALwyle+sk+91fH89nvwgx+0fLcfmedA8D6y807A9nD2aL3a2Yxd5FpDjuK2DrELV8LJJ588ir+JHtv2a6cduUcZjSS2KVtPre96dLu+GUiXKV/pgBfcZkzH2k7MLpkf97jHLTlUOX7q2c/uuI5y+MqGet3lLnc51rz6Ej+R1oGWdNuW9TLeRsmgHFg46dGbwEuIN0mv0wt5vybVEufciOjBfnq2x9m87fZKV7ryJGvyjfX6pMUfGB0CvqzAe7i9bm4PeFZl1JmXvv71r99527o0FPs8YWjCb4bQcVu3W44gR44c6TdV0AAVvyeUP+XNcR3G4h1X4ZZiW4ni5b4JsAinC28YmLNLFXsgv5EB0J10Os7CVTqcQNI/1nD7Gxt22q23X0OqVrZXXZzTwuE6EqYChiFzJHMwCjANSMONFNtKUq9sU77QnJnx5YdBZBsyS3rC5K9TlPqsq1NoCBMP/RrqSMlHU2PTm4alw+TVMuLql/k/Q5mCYd0qHtrJT1jzV8UjF5kTX4U/Ny+06MA6x9mXDzQ9LOVrbZz4MpxLfA3eLEMPDb0wPVRjTB3yD/5BhDGAKGKKR5Q6lV/TKy0HjAIxeA0TEM/OgQcyjjRPDaqHatbR0/xlqywHsJKBDh1OQehV2Ya46+qYkSrhsPzUdWSmi+xexetOlZmTnjqxoTxJpFz0u6mcc3gGZyNDV6gq134xIVc1RhjtJ2Q2pgGmLBkS19HTMAwp8pJRXEeJAYdGvT7azlTDY5hGMPChtuhthRaXbYtK0zbPksr30iVTjLPajY1KoymEonrZbIuhayeIvuLRO8Ie/xgLXaR+Y2TgZNGX/DltlZ2iI60Tq5eOHQcTOmvDnfpXvOiIQdv2Nar5pWPZXIjR13KJk13H20uH2MjQMXIXjXDA1p353CrPFCH3GvIClGzK5IEODz3Yd9WIYxCDdkveAwvm0Wi49czY2jnnfvpS+SiVwXqAoRqNRnGL/IlPfGLfPcDLUVK8HSMwbdMRKJ3h6vSBNCh6Hv5oZ+Y7bbJZ7zhfY1cIDTLkiGrKzwlt393//vfvt94/3HRT57HK463e5MsDLdKnPHNkZuRkdls/+qGrbKmisSmEjpeWVj1HxlNOOWXxAz/wA/0djV0+nYSzaBAca4R2nn3xvOc9r69b5KWtxdfBxoYeoRG2ON3P7eN1wg3zbVcBXmpd5+KFbJPl6RXllH/EIx4hulQSZWnEsYbkaeqWoXI+Z6PeGdKlBTTNcT+elEXvVOdcHY9lVGKEQ++kYec0oJHF/n7d4x/yqdcMmeGjPYQu9w5feO7urgIybgKpE1sZsxcjXdvZm0Uy9zZmIRekjQxduaooyiZ4jC4VKvT3FUWPN4lHj4FIW6fsDL++0sFL2KGxWxLPFcEiM5oVdOgYsxOSwL0EJ+fUmzcmDzw6QXdIWxl0q84Ydm56SGd8IHIEN3VNfkcqf+kg7iFMHZSKXEYe06tJ2DH+6LTKHLmEcXLoBnd3t9nhskMzPOGrS61PaGd6Z5/eui86VRYO+3IcwPHotEnozg03NvRKOBWP0pNXK5O0TUKV8wMJ8YohSYtBTNG1VQV49hiWKVcMOkpPow3roOzZOzTcPAnEuF2TKTpI/jAcy69pqR85nOcwRJNN5zalMQpFn0L49JA0ck/Nn9GEO6WrpKPl5xr9/FKXyBgc6ZEjNIQ1HvnoG25opw1DA16mUzrs1JcIs70ZupFtbrgvQw+TVCJhrUxwNg1DS7gXyODKEHIfgDcw7QFTxiEvvFsLuTzBi6TRe8aGf0u6pVzqZ6QYa2SL3shcO0g6pnXSHFB2aCReVwdW6WId7egW/chHtkwF19FWJjgJa+ekb3KH9jp5pvK3YughTigLHw2msmnE5K8LlTdMXa0tcK/enhkdM4x1NMbyM6/j0R259Tyq6QfFGtbtouS89hjPTesxJsNUGj35mad656QbVjwcXUQW7yY0FeuG2tLdVPGuFA+tmEJl6jjkAV8dPeVkYQ6qsf99+0Sld+HQxabOiXzKZDuWjjPdMv1461vf2uf6RlNGOqbD1DHvfcmxaLhj+MP6bXK9NUNPoziHvMnzkGPC/uzP/uziPve5T28UytgPaAyP2/HmjNyDzYGrty2udzSDefrTn96/8pD0cytkdDyijkbGk08+uT8xxdDpk8w6583bl/UYewXvhLQjxLjoaExPpg3oM8YYeowI7Yc//OH9V+nuJY6HL/gBdM2l87jhXHrKZW9920ZOhnPeoD9Xopl4eRHkTPQT0MYa7QSEPVxUT5bin7yzi7OO35Qhhc5+w/DPNECj88TSLdTGdiqCCw9+RoYaBichOcMra5X9yq58HVH2Snev5ebKvzWPHoZRpBsClB5Pv66X8rwazVCqHAit0N5LGL4UiYcHAjS84drZccBQAsHHO/HakEkL/jbC0MzQH370IC3zXduacHnolIE7pidp8ug0dMmacjq+m11+4mM05tTNlMuUI+XRMlVxf4X8oY2vdG0QGZQRtwi1lZvrOXw3xdm6oUcAc/W8TSpp68L9rqzH6KcBKJjSMx+E64gvYBDyho2QDmDeDEzLlnPldp1G7JkTf/hHhgmUZXLwEsoQx9MImY7J0LM4k1/xQ6ym1/waN7+/qi+L7OwupezcEC0OhKFHdwyX3kzHdDI6ksbozd3PWrHNmQ4wl/8meAdm6CpOEYSvyh0TLoqIYY3h7DUtezZViTH6jByXag0iDcSAxHkrUG86OZuffd+58q7SAd1EPx4gB1UGo09upuS1c3CycKu40itEvsgrL3qwy6PjTj3bWemsizPqvNbDCMHJ5UGJYVn5Fq7VSUSmIe42rw/M0AmZCiRcJfgcnFXlN8kLr7zT5LdOP70b28V3PBSjN9y7UfSmdvfxYzu7IIzKeRsvvq8deYy3fMOxp+wZQnhW3ODkCMCL25GDP2wfFMi+chOnecyz+8KOsTIOoJw3oHmB/uVa+sd30ittcfg6Sn0rbTqWTvyEJzyhv3fSNG5VhxnSdR06HkLxWcQjR450uXXGm970potHPepRffpCB+pu+uUu7kMe8pBObngGZ4zHNtMO1NC3Keg2aVG8hmLohu+XvvSl/Tfk4aWY3ntSgVF6Kelc8PLSGHo8dy1r2mSL04KzvQOyZi3jjKUuKGU4I+4FqHNB52D4woBXVOSub9I2DeO56VE9gCMEzvLw3hWSLy3rpJp/kPFzan2QXM6HtONhbd/xZjzM5ZvXMa/knUB2AhhI8J2hvt71rtfzHRgDl7/8FXp5b6JCRyNmX74aVkce/MX4Ded483zC+hWIePjIgES8uwdQzOH9eh12ZBBPGnmCX9mHbupZ8+bGU5ZskQ+vSltnBkkTD674uQEXSY8+VCylazBGV406jZGwG2XDDST97LOPn4Rsb7/tWTrOplMBBSPHUIZzOIbzOaGOpGMETLmUJyt66UimPq4ZvdB0JeDar0LKJW0qP+kJp/CTPjfEn6zqt5cbWkM+h4beNMIw6rAaDxRlUXptePggoU5ielHBXH5T4PHi9SIDAxq7ZRbDspNhVKqgk8XTkju4cGo9UycfMxjjUWkGt6aJZ8Sayh/iz7mO/FWnOWpc6zKHVnAODT2aaGGMIo2WsKCMRhmnfWPzVKADmIKY48+lMUp4RWIMzHEGu0eR/T1tT/oDrZOFL8PgzXMDD65O4E4mueWbNjEuPp3Bww/9iOCQnC98BNCH8+GdtHSs5DcBltFNIuiiZerlnodX0rWH2Pu836tEhnLNpX2ghh7lzxXmIPD2pu55kmiQvHPQMQILT56YoWsQRhTjj+HNo7weyyLZyUx8yGErEW8Pp9hNcRJSuj13Oz/eFwmHbGRh8N7rrrwz9so6pelGn10U9xjgqoNO8NftsUFfodChK50cRPNYodeD7Bd8xtKDKXg5y2ORbhSKl693iTfR6YEaOiWd17CJDMFN2Fp5rfiZH3vCaLjLUAtvu9Obv/oNITfdGGMMwejiLbRDsFgF3mlT9+iH52LgmPvb6RkDOqh3XzvODN1VWtEPuQGDznv4K95e4wdm6ATvw2GrcCqxSki4aZiEq/Dn5oUW+jyU3xDg5McLLofHlr4OQi9za51EWuer7s1jii87TyNY4+voT+VXPtWjZ25PhvCRzxDdGHMXlDwZCdA/cuRI3wL1tmC7OKl/lTtpzscbpdCTbz9+uB6Rvk5z6FU5ImtC9eDJTWHoNraUclN6mUo/MEPnWShwLqi03mxxJb5fSMOQw1Yfr0N5jgCkkfBhEDyxvW7gWpm5dwwja/i5ro2h4dJ4wuDvt36VT+hXvpWPeHckjWnFkQZ6WjM8UMuFrvTEtY9dkDzMwuuaSzPKjCZ9lBtpQ3yAdQVcd2fxM2Wqu0BwIrO4eXrKut4LbN3Q41G81GevYHEE9mMYoTH2TKVhUT76PNTYzgX+7oiCVXLEADriyF81nMQz5XCdtJGik0mRJ2WrweZYwwmGUTpbJRpj9dBxwHFgI8AQwks6h6QsY3XXNXdec8zWFIfDGEJ2fHJHuuajNRwZotv1E8hKaTy+NUOPIhw88gJ9wxuFLYVsym6tuhzSeiVKr48P17PzmubQHBd9dapF4pOf/OTuNQx9Godxe7LfQwE8OM/Dw9/5znfuZ77x00CMxFmSq7SFF5Ae41rNdXeuO4caMEMvnnnHi4aPY9hdcjqFPO9tnvXMtguh09AzA0crtG05GvZXgQXrk570pK4L9SaPHZd45tR7SCOdSL284cCNM1uB6kbH1gPoADQCPPlTn/rULnPS6fW0005bnN6OYeAb406ZbYVbM/QIpDI+fbINoNAxz7CKdhToQdu8FDP4GsY8NE+/WIwxdN/gfMADHhC0XeGmcqRTCN3W17mGwAgz6tS8KeOqOOL/sPPKjGG6a1MCi8v6Qs7gRT+ur3vd6/Zf8obhVL2zYIR/pzvdaeEB9DiIMRpJ81oRvyEYCRi6KZD39xwEbMXQq/IOQsj90ozhVTrS/EDCmj8Vn1PXipPdDh+5jWfnOXPab8gnsgzDIV6mKN5sYD2BpzI+mpVTl8My27quzidy7od2aAj7t5v2Q2yi7L4MPQKqeBpXWtIneK5NRiv04ikq3Tn0lQueOC9UpwkMJXPb0MbTNCC8ExK40koFklbzxavMwUUr9BImL6ERxvBPzgz95AyfhMonrmylHVpzQjQqnZSp8iU/IRyy2bI0vct8PtPD4PXdphDcCeUlXxI+tZ20UaZFVYYBmT1d7svQI4ywxvckyUShWvHKoypsrGjKyUs5hh1PaOqQRaH04CiXeKWbtISV7jBeaQRfI+JX5arl1MeUgwExHkZvnq1MaAhrXHn1cY7dEWM0Uj9566DSm8Id8nOH1fpLh6wPgOA7rNuQZmjVdGmRWd2DEydUcfcT39jQIwimEaam7UeYsbJRXjXGMbxVaaEhzBNGb3nLW5ZFTCnWQWgM5Ujdk49O0oR2dIA7hxV0NAvvdFhbnPX9McG1IxLaoSsv5dq73YO6DHWYbU1f0sYhbu5fby5FjsgYvLmhOuWsjg8FBNz13SZsZOgqkydbCOE9iFbKGb5qQ5wgZPM0rfWPJyWesCKWNApEz9Cmx9v7zkd67SzYMVgFcN3itrtCPkMrOm4ru11vl4CXNV/+lJ099E4vcrYLr6Oz3cYITSfgM6Bsj3nWMZ3EmfYzzzxzORTTlS04n2v0vkf8AU/otrlvfPJg9Kduzrn7QocbNmQCjExn8IlD/GNM8B3j/cvWeXwYTf3IJvRQiHZx7yBG2Imt+ct0i15Oe8UrFn/b6mIHzQ0m51nc+vd5RTLATVt7exldG4HwT3pnV9qzCXOODRRZ1PUOd7hDfyBDXJ3pil7oCqTepdjm0aaMUWiVWX7x4rWvfa1V27Gm3GOt0Xu8VaiH0s/NX/NWnV/bMejhYx/72BO+eEFu8NznPndUrne/612j9a2JodFetjlKQ32bYS3zmkEs40NdNO9XSfd4e5a247djA8eOHj3a9apcM6RduK3xj7XOuot+26bbhSuh3b7vuG3L71g7N9Lj7X0xSx2NFmqJrSP1rNZxj93jHvfYxa+dnxkt2s7W7MId6mDddTtgNkp7m4kbefTGeOklxPPa6FaRAwN8eAkhb5oh2fUq4GFAPKSTbyeddFI/CSedh8zc0PUY8OTAlpgpTxaKdjbioeXzxvjx0IDHoxueO3jS1MOvpkn3A0lXNz+ejPf2nhyjUw5amTrw4ACe8jyhUL0A7xodJewZa/7Ix3sD249ksB2b9Yx09OCB6NDuj3sGdDCHH3nVjS6rzNIPAmYZeiqlMcVVPuFBCFVphrcwhme6kIZOfi0zFR/DrY02VU66snDV3Rx4CNI3BUZRF5tT5cfkXoerU8Zo9iLbFP2DTI/rmtsmm8gyy9B5B2CVfX6BHA/NfHYoV7xj/erz2GJvlRGF9vCTikNeY9d54HnMuyUtC+OUT3quE2ZhVs/fpH7BEaoLLwmchQ/kVn+u14U5d2J9Eo8dusOykSOvtkvZId6q69Q791BXtckqOqvyZhm6HYIjR470B2kNj7sWHas4HEAeGXh3CyF308bAFpi7tJ5IJ6/h3kv84+WaVYwV62lRtCHc8K2cRVrSJwuWDAZi0RpDKVk9zV3bvORJfRhmFl8VF0/PqJIlZ7F1clOjMbD4NsXxcDK63q1jYTpXdnjKty/MLb68vbjftqUdKnTHgBz07O6yp4A2GT0YuKlLRucx+ttKazeiGrc1wFDi1degnmvZzJTgFDtmTOZ9GrqCRoQ7t9HHaFR6c+KeI3XzpAK5Mi+t6WQbGormgTtspk3rPdeYtsGv1mlOfKzec8ptgjPL0DcheIh7qIHzowZmTV0IPvQo56fKTHnoMZmncMfqM1Z+DG9V2hS/Mdqb4OI5hj9Gdwp3Su5NaUzhT9Efpo/VY4iz3+tDj75fDR6Wv0Bo4MTJ4wVC5EMhDzWwuQYODX1znR2WuABq4NDQL4CNdijy5ho4NPTNdXZY4gKogUNDvwA22qHIm2vg0NA319lhiQugBg4N/QLYaIcib66BQ0PfXGeHJS6AGjg09Atgox2KvLkGDg19c50dlrgAauDQ0C+AjXYo8uYaODT0zXV2WOICqIFDQ78ANtqhyJtr4NDQN9fZYYkLoAb+P/s38D0k8YfHAAAAAElFTkSuQmCC"
+ webUI["html/js/base_ts.js"] = "dmFyIFNFUlZFUiA9IG5ldyBPYmplY3QoKTsKdmFyIEJVTEtfRURJVCA9IGZhbHNlOwp2YXIgQ09MVU1OX1RPX1NPUlQ7CnZhciBJTkFDVElWRV9DT0xVTU5fVE9fU09SVDsKdmFyIFNFQVJDSF9NQVBQSU5HID0gbmV3IE9iamVjdCgpOwp2YXIgVU5ETyA9IG5ldyBPYmplY3QoKTsKdmFyIFNFUlZFUl9DT05ORUNUSU9OID0gZmFsc2U7CnZhciBXU19BVkFJTEFCTEUgPSBmYWxzZTsKY29uc3QgdG9vbHRpcFRyaWdnZXJMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtYnMtdG9nZ2xlPSJ0b29sdGlwIl0nKTsKY29uc3QgdG9vbHRpcExpc3QgPSBbLi4udG9vbHRpcFRyaWdnZXJMaXN0XS5tYXAodG9vbHRpcFRyaWdnZXJFbCA9PiBuZXcgYm9vdHN0cmFwLlRvb2x0aXAodG9vbHRpcFRyaWdnZXJFbCkpOwovLyBuZXcgQ2xpcGJvYXJkSlMoJy5jb3B5LWJ0bicpOwp2YXIgY2xpcGJvYXJkID0gbmV3IENsaXBib2FyZEpTKCcuY29weS1idG4nKTsKY2xpcGJvYXJkLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24gKGUpIHsKICAgIGNvbnN0IHRvb2x0aXAgPSBib290c3RyYXAuVG9vbHRpcC5nZXRJbnN0YW5jZShlLnRyaWdnZXIpOwogICAgdG9vbHRpcC5zZXRDb250ZW50KHsgJy50b29sdGlwLWlubmVyJzogJ0NvcGllZCEnIH0pOwp9KTsKY2xpcGJvYXJkLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlKSB7CiAgICBjb25zb2xlLmxvZyhlKTsKfSk7CnZhciBwb3B1cE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKdmFyIGxvYWRpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmciKSwgewogICAga2V5Ym9hcmQ6IHRydWUsCiAgICBmb2N1czogdHJ1ZQp9KTsKLy8gTWVuw7wKdmFyIG1lbnVJdGVtcyA9IG5ldyBBcnJheSgpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJwbGF5bGlzdCIsICJ7ey5tYWluTWVudS5pdGVtLnBsYXlsaXN0fX0iLCAibTN1LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5wbGF5bGlzdH19IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ4bWx0diIsICJ7ey5tYWluTWVudS5pdGVtLnhtbHR2fX0iLCAieG1sdHYucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnhtbHR2fX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oImZpbHRlciIsICJ7ey5tYWluTWVudS5pdGVtLmZpbHRlcn19IiwgImZpbHRlci5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuZmlsdGVyfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oIm1hcHBpbmciLCAie3subWFpbk1lbnUuaXRlbS5tYXBwaW5nfX0iLCAibWFwcGluZy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUubWFwcGluZ319IikpOwptZW51SXRlbXMucHVzaChuZXcgTWFpbk1lbnVJdGVtKCJ1c2VycyIsICJ7ey5tYWluTWVudS5pdGVtLnVzZXJzfX0iLCAidXNlcnMucG5nIiwgInt7Lm1haW5NZW51LmhlYWRsaW5lLnVzZXJzfX0iKSk7Cm1lbnVJdGVtcy5wdXNoKG5ldyBNYWluTWVudUl0ZW0oInNldHRpbmdzIiwgInt7Lm1haW5NZW51Lml0ZW0uc2V0dGluZ3N9fSIsICJzZXR0aW5ncy5wbmciLCAie3subWFpbk1lbnUuaGVhZGxpbmUuc2V0dGluZ3N9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nIiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nfX0iLCAibG9nLnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2d9fSIpKTsKbWVudUl0ZW1zLnB1c2gobmV3IE1haW5NZW51SXRlbSgibG9nb3V0IiwgInt7Lm1haW5NZW51Lml0ZW0ubG9nb3V0fX0iLCAibG9nb3V0LnBuZyIsICJ7ey5tYWluTWVudS5oZWFkbGluZS5sb2dvdXR9fSIpKTsKLy8gS2F0ZWdvcmllbiBmw7xyIGRpZSBFaW5zdGVsbHVuZ2VuCnZhciBzZXR0aW5nc0NhdGVnb3J5ID0gbmV3IEFycmF5KCk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmdlbmVyYWx9fSIsICJUaHJlYWRmaW5BdXRvVXBkYXRlLHNzZHAsdHVuZXIsZXBnU291cmNlLGVwZ0NhdGVnb3JpZXMsZXBnQ2F0ZWdvcmllc0NvbG9ycyxkdW1teSxkdW1teUNoYW5uZWwsaWdub3JlRmlsdGVycyxhcGkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmZpbGVzfX0iLCAidXBkYXRlLGZpbGVzLnVwZGF0ZSx0ZW1wLnBhdGgsY2FjaGUuaW1hZ2VzLG9taXRQb3J0cyx4ZXBnLnJlcGxhY2UubWlzc2luZy5pbWFnZXMseGVwZy5yZXBsYWNlLmNoYW5uZWwudGl0bGUsZW5hYmxlTm9uQXNjaWkiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5Lm5ldHdvcmt9fSIsICJsaXN0ZW5pbmdJcCx0aHJlYWRmaW5Eb21haW4sdXNlSHR0cHMsZm9yY2VIdHRwcyIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuc3RyZWFtaW5nfX0iLCAiYnVmZmVyLHVkcHh5LGJ1ZmZlci5zaXplLmtiLHN0b3JlQnVmZmVySW5SQU0sYnVmZmVyLnRpbWVvdXQsdXNlci5hZ2VudCxmZm1wZWcucGF0aCxmZm1wZWcub3B0aW9ucyx2bGMucGF0aCx2bGMub3B0aW9ucyIpKTsKc2V0dGluZ3NDYXRlZ29yeS5wdXNoKG5ldyBTZXR0aW5nc0NhdGVnb3J5SXRlbSgie3suc2V0dGluZ3MuY2F0ZWdvcnkuYmFja3VwfX0iLCAiYmFja3VwLnBhdGgsYmFja3VwLmtlZXAiKSk7CnNldHRpbmdzQ2F0ZWdvcnkucHVzaChuZXcgU2V0dGluZ3NDYXRlZ29yeUl0ZW0oInt7LnNldHRpbmdzLmNhdGVnb3J5LmF1dGhlbnRpY2F0aW9ufX0iLCAiYXV0aGVudGljYXRpb24ud2ViLGF1dGhlbnRpY2F0aW9uLnBtcyxhdXRoZW50aWNhdGlvbi5tM3UsYXV0aGVudGljYXRpb24ueG1sLGF1dGhlbnRpY2F0aW9uLmFwaSIpKTsKZnVuY3Rpb24gc2hvd1BvcFVwRWxlbWVudChlbG0pIHsKICAgIHNob3dFbGVtZW50KGVsbSwgdHJ1ZSk7CiAgICAvLyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgIC8vICAgc2hvd0VsZW1lbnQoInBvcHVwIiwgdHJ1ZSk7CiAgICAvLyB9LCAxMCk7CiAgICByZXR1cm47Cn0KZnVuY3Rpb24gc2hvd0VsZW1lbnQoZWxtSUQsIHR5cGUpIHsKICAgIGlmIChlbG1JRCA9PSAicG9wdXAtY3VzdG9tIiB8fCBlbG1JRCA9PSAicG9wdXAiKSB7CiAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgIHBvcHVwTW9kYWwuc2hvdygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBwb3B1cE1vZGFsLmhpZGUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlmIChlbG1JRCA9PSAibG9hZGluZyIpIHsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgbG9hZGluZ01vZGFsLnNob3coKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgbG9hZGluZ01vZGFsLmhpZGUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQpmdW5jdGlvbiBjaGFuZ2VCdXR0b25BY3Rpb24oZWxlbWVudCwgYnV0dG9uSUQsIGF0dHJpYnV0ZSkgewogICAgdmFyIHZhbHVlID0gZWxlbWVudC5vcHRpb25zW2VsZW1lbnQuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25JRCkuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpOwp9CmZ1bmN0aW9uIGdldExvY2FsRGF0YShkYXRhVHlwZSwgaWQpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgc3dpdGNoIChkYXRhVHlwZSkgewogICAgICAgIGNhc2UgIm0zdSI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiaGRociI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbGVzIl1bZGF0YVR5cGVdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiZmlsdGVyIjoKICAgICAgICBjYXNlICJjdXN0b20tZmlsdGVyIjoKICAgICAgICBjYXNlICJncm91cC10aXRsZSI6CiAgICAgICAgICAgIGlmIChpZCA9PSAtMSkgewogICAgICAgICAgICAgICAgZGF0YVsiYWN0aXZlIl0gPSB0cnVlOwogICAgICAgICAgICAgICAgZGF0YVsiY2FzZVNlbnNpdGl2ZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICBkYXRhWyJkZXNjcmlwdGlvbiJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJleGNsdWRlIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbImZpbHRlciJdID0gIiI7CiAgICAgICAgICAgICAgICBkYXRhWyJpbmNsdWRlIl0gPSAiIjsKICAgICAgICAgICAgICAgIGRhdGFbIm5hbWUiXSA9ICIiOwogICAgICAgICAgICAgICAgZGF0YVsidHlwZSJdID0gImdyb3VwLXRpdGxlIjsKICAgICAgICAgICAgICAgIGRhdGFbIngtY2F0ZWdvcnkiXSA9ICIiOwogICAgICAgICAgICAgICAgU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWx0ZXIiXVtpZF0gPSBkYXRhOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInNldHRpbmdzIl1bImZpbHRlciJdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAieG1sdHYiOgogICAgICAgICAgICBkYXRhID0gU0VSVkVSWyJzZXR0aW5ncyJdWyJmaWxlcyJdW2RhdGFUeXBlXVtpZF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgInVzZXJzIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsidXNlcnMiXVtpZF1bImRhdGEiXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibWFwcGluZyI6CiAgICAgICAgICAgIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAibTN1R3JvdXBzIjoKICAgICAgICAgICAgZGF0YSA9IFNFUlZFUlsiZGF0YSJdWyJwbGF5bGlzdCJdWyJtM3UiXVsiZ3JvdXBzIl07CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIGRhdGE7Cn0KZnVuY3Rpb24gZ2V0T2JqS2V5cyhvYmopIHsKICAgIHZhciBrZXlzID0gbmV3IEFycmF5KCk7CiAgICBmb3IgKHZhciBpIGluIG9iaikgewogICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaSkpIHsKICAgICAgICAgICAga2V5cy5wdXNoKGkpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBrZXlzOwp9CmZ1bmN0aW9uIGdldE93bk9ialByb3BzKG9iamVjdCkgewogICAgcmV0dXJuIG9iamVjdCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgOiBbXTsKfQpmdW5jdGlvbiBnZXRBbGxTZWxlY3RlZENoYW5uZWxzKCkgewogICAgdmFyIGNoYW5uZWxzID0gbmV3IEFycmF5KCk7CiAgICBpZiAoQlVMS19FRElUID09IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuIGNoYW5uZWxzOwogICAgfQogICAgdmFyIHRycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50X3RhYmxlIikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRSIik7CiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0cnNbaV0uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpIHsKICAgICAgICAgICAgaWYgKHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICBjaGFubmVscy5wdXNoKHRyc1tpXS5pZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gY2hhbm5lbHM7Cn0KZnVuY3Rpb24gc2VsZWN0QWxsQ2hhbm5lbHModGFibGVfbmFtZSA9ICJjb250ZW50X3RhYmxlIikgewogICAgdmFyIGJ1bGsgPSBmYWxzZTsKICAgIHZhciB0cnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZV9uYW1lKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGlmICh0cnNbMF0uZmlyc3RDaGlsZC5maXJzdENoaWxkLmNoZWNrZWQgPT0gdHJ1ZSkgewogICAgICAgIGJ1bGsgPSB0cnVlOwogICAgfQogICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0cnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHJzW2ldLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKSB7CiAgICAgICAgICAgIHN3aXRjaCAoYnVsaykgewogICAgICAgICAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICAgICAgICAgIHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgIHRyc1tpXS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGJ1bGtFZGl0KCkgewogICAgQlVMS19FRElUID0gIUJVTEtfRURJVDsKICAgIHZhciBjbGFzc05hbWU7CiAgICB2YXIgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImJ1bGsiKTsKICAgIHN3aXRjaCAoQlVMS19FRElUKSB7CiAgICAgICAgY2FzZSB0cnVlOgogICAgICAgICAgICBjbGFzc05hbWUgPSAiYnVsayBzaG93QnVsayI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgIGNsYXNzTmFtZSA9ICJidWxrIGhpZGVCdWxrIjsKICAgICAgICAgICAgYnJlYWs7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICByb3dzW2ldLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICAgICByb3dzW2ldLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBzb3J0VGFibGUoY29sdW1uLCB0YWJsZV9uYW1lID0gImNvbnRlbnRfdGFibGUiKSB7CiAgICAvLyBjb25zb2xlLmxvZygiQ09MVU1OOiAiICsgY29sdW1uKTsKICAgIGlmICgoY29sdW1uID09IENPTFVNTl9UT19TT1JUICYmIHRhYmxlX25hbWUgPT0gImNvbnRlbnRfdGFibGUiKSB8fCAoY29sdW1uID09IElOQUNUSVZFX0NPTFVNTl9UT19TT1JUICYmIHRhYmxlX25hbWUgPT0gImluYWN0aXZlX2NvbnRlbnRfdGFibGUiKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlX25hbWUpOwogICAgdmFyIHRhYmxlSGVhZCA9IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUUiIpWzBdOwogICAgdmFyIHRhYmxlSXRlbXMgPSB0YWJsZUhlYWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlREIik7CiAgICB2YXIgc29ydE9iaiA9IG5ldyBPYmplY3QoKTsKICAgIHZhciB4LCB4VmFsdWU7CiAgICB2YXIgdGFibGVIZWFkZXI7CiAgICB2YXIgc29ydEJ5U3RyaW5nID0gZmFsc2U7CiAgICBpZiAoY29sdW1uID4gMCAmJiBDT0xVTU5fVE9fU09SVCA+IDAgJiYgdGFibGVfbmFtZSA9PSAiY29udGVudF90YWJsZSIpIHsKICAgICAgICB0YWJsZUl0ZW1zW0NPTFVNTl9UT19TT1JUXS5jbGFzc05hbWUgPSAicG9pbnRlciI7CiAgICAgICAgdGFibGVJdGVtc1tjb2x1bW5dLmNsYXNzTmFtZSA9ICJzb3J0VGhpcyI7CiAgICB9CiAgICBlbHNlIGlmIChjb2x1bW4gPiAwICYmIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID4gMCAmJiB0YWJsZV9uYW1lID09ICJpbmFjdGl2ZV9jb250ZW50X3RhYmxlIikgewogICAgICAgIHRhYmxlSXRlbXNbSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlRdLmNsYXNzTmFtZSA9ICJwb2ludGVyIjsKICAgICAgICB0YWJsZUl0ZW1zW2NvbHVtbl0uY2xhc3NOYW1lID0gInNvcnRUaGlzIjsKICAgIH0KICAgIGlmICh0YWJsZV9uYW1lID09ICJjb250ZW50X3RhYmxlIikgewogICAgICAgIENPTFVNTl9UT19TT1JUID0gY29sdW1uOwogICAgfQogICAgZWxzZSBpZiAodGFibGVfbmFtZSA9PSAiaW5hY3RpdmVfY29udGVudF90YWJsZSIpIHsKICAgICAgICBJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9IGNvbHVtbjsKICAgIH0KICAgIHZhciByb3dzID0gdGFibGUucm93czsKICAgIGlmIChyb3dzWzFdICE9IHVuZGVmaW5lZCkgewogICAgICAgIHRhYmxlSGVhZGVyID0gcm93c1swXTsKICAgICAgICB4ID0gcm93c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEQiKVtjb2x1bW5dOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHggPSByb3dzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJURCIpW2NvbHVtbl07CiAgICAgICAgICAgIHN3aXRjaCAoeC5jaGlsZE5vZGVzWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkgewogICAgICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIilbMF0udmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICAgICAgICAgIHhWYWx1ZSA9IHguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlAiKVswXS5pbm5lclRleHQudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGNvbnNvbGUubG9nKHguY2hpbGROb2Rlc1swXS50YWdOYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoeFZhbHVlID09ICIiKSB7CiAgICAgICAgICAgICAgICB4VmFsdWUgPSBpOwogICAgICAgICAgICAgICAgc29ydE9ialtpXSA9IHJvd3NbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGlzTmFOKHhWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWUgPSBwYXJzZUZsb2F0KHhWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRPYmpbeFZhbHVlXSA9IHJvd3NbaV07CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5U3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9ialt4VmFsdWUudG9Mb3dlckNhc2UoKSArIGldID0gcm93c1tpXTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2hpbGUgKHRhYmxlLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgICAgdGFibGUucmVtb3ZlQ2hpbGQodGFibGUuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgICAgIHZhciBzb3J0VmFsdWVzID0gZ2V0T2JqS2V5cyhzb3J0T2JqKTsKICAgICAgICBpZiAoc29ydEJ5U3RyaW5nID09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNvbHVtbiA9PSAzKSB7CiAgICAgICAgICAgICAgICB2YXIgY29sbGF0b3IgPSBuZXcgSW50bC5Db2xsYXRvcih1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KTsKICAgICAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydChjb2xsYXRvci5jb21wYXJlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmdW5jdGlvbiBzb3J0RmxvYXQoYSwgYikgewogICAgICAgICAgICAgICAgcmV0dXJuIGEgLSBiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNvcnRWYWx1ZXMuc29ydChzb3J0RmxvYXQpOwogICAgICAgIH0KICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0YWJsZUhlYWRlcik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3J0VmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHNvcnRPYmpbc29ydFZhbHVlc1tpXV0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjcmVhdGVTZWFyY2hPYmooKSB7CiAgICBTRUFSQ0hfTUFQUElORyA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkYXRhID0gU0VSVkVSWyJ4ZXBnIl1bImVwZ01hcHBpbmciXTsKICAgIHZhciBjaGFubmVscyA9IGdldE9iaktleXMoZGF0YSk7CiAgICB2YXIgY2hhbm5lbEtleXMgPSBbIngtYWN0aXZlIiwgIngtY2hhbm5lbElEIiwgIngtbmFtZSIsICJfZmlsZS5tM3UubmFtZSIsICJ4LWdyb3VwLXRpdGxlIiwgIngteG1sdHYtZmlsZSJdOwogICAgY2hhbm5lbHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgY2hhbm5lbEtleXMuZm9yRWFjaChrZXkgPT4gewogICAgICAgICAgICBpZiAoa2V5ID09ICJ4LWFjdGl2ZSIpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtpZF1ba2V5XSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gIm9ubGluZSAiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIGZhbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hfTUFQUElOR1tpZF0gPSAib2ZmbGluZSAiOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gIngteG1sdHYtZmlsZSIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgeG1sdHZGaWxlID0gZ2V0VmFsdWVGcm9tUHJvdmlkZXJGaWxlKGRhdGFbaWRdW2tleV0sICJ4bWx0diIsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHhtbHR2RmlsZSAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIX01BUFBJTkdbaWRdID0gU0VBUkNIX01BUFBJTkdbaWRdICsgeG1sdHZGaWxlICsgIiAiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIFNFQVJDSF9NQVBQSU5HW2lkXSA9IFNFQVJDSF9NQVBQSU5HW2lkXSArIGRhdGFbaWRdW2tleV0gKyAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGVuYWJsZUdyb3VwU2VsZWN0aW9uKHNlbGVjdG9yKSB7CiAgICB2YXIgbGFzdGNoZWNrID0gbnVsbDsgLy8gbm8gY2hlY2tib3hlcyBjbGlja2VkIHlldAogICAgLy8gZ2V0IGRlc2lyZWQgY2hlY2tib3hlcwogICAgdmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKICAgIC8vIGxvb3Agb3ZlciBjaGVja2JveGVzIHRvIGFkZCBldmVudCBsaXN0ZW5lcgogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjaGVja2JveGVzLCBmdW5jdGlvbiAoY2J4LCBpZHgpIHsKICAgICAgICBjYnguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgIC8vIHRlc3QgZm9yIHNoaWZ0IGtleSwgbm90IGZpcnN0IGNoZWNrYm94LCBhbmQgbm90IHNhbWUgY2hlY2tib3gKICAgICAgICAgICAgaWYgKGV2dC5zaGlmdEtleSAmJiBudWxsICE9PSBsYXN0Y2hlY2sgJiYgaWR4ICE9PSBsYXN0Y2hlY2spIHsKICAgICAgICAgICAgICAgIC8vIGdldCByYW5nZSBvZiBjaGVja3MgYmV0d2VlbiBsYXN0LWNoZWNrYm94IGFuZCBzaGlmdC1jaGVja2JveAogICAgICAgICAgICAgICAgLy8gTWF0aC5taW4vbWF4IGRvZXMgb3VyIHNvcnRpbmcgZm9yIHVzCiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjaGVja2JveGVzLCBNYXRoLm1pbihsYXN0Y2hlY2ssIGlkeCksIE1hdGgubWF4KGxhc3RjaGVjaywgaWR4KSkKICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbG9vcCBvdmVyIGVhY2gKICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoY2NieCkgewogICAgICAgICAgICAgICAgICAgIGNjYnguY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0Y2hlY2sgPSBpZHg7IC8vIHNldCB0aGlzIGNoZWNrYm94IGFzIGxhc3QtY2hlY2tlZCBmb3IgbGF0ZXIKICAgICAgICB9KTsKICAgIH0pOwp9CmZ1bmN0aW9uIHNlYXJjaEluTWFwcGluZygpIHsKICAgIHZhciBzZWFyY2hWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2hNYXBwaW5nIikudmFsdWU7CiAgICB2YXIgdHJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfdGFibGUiKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVFIiKTsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdHJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGlkID0gdHJzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKTsKICAgICAgICB2YXIgZWxlbWVudCA9IFNFQVJDSF9NQVBQSU5HW2lkXTsKICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybjsKfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTnVtYmVycyhlbGVtZW50cykgewogICAgdmFyIHN0YXJ0aW5nX251bWJlcl9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIngtY2hhbm5lbHMtc3RhcnQiKVswXTsKICAgIHZhciBlbGVtcyA9IGVsZW1lbnRzLnNwbGl0KCIsIik7CiAgICB2YXIgc3RhcnRpbmdfbnVtYmVyID0gcGFyc2VGbG9hdChzdGFydGluZ19udW1iZXJfZWxlbWVudC52YWx1ZSk7CiAgICB2YXIgZGF0YSA9IFNFUlZFUlsieGVwZyJdWyJlcGdNYXBwaW5nIl07CiAgICBlbGVtcy5mb3JFYWNoKGVsZW1lbnQgPT4gewogICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudCk7CiAgICAgICAgdmFyIGlucHV0ID0gZWxlbS5jaGlsZE5vZGVzWzFdLmZpcnN0Q2hpbGQ7CiAgICAgICAgaW5wdXQudmFsdWUgPSBzdGFydGluZ19udW1iZXIudG9TdHJpbmcoKTsKICAgICAgICBkYXRhW2VsZW1lbnRdWyJ4LWNoYW5uZWxJRCJdID0gc3RhcnRpbmdfbnVtYmVyLnRvU3RyaW5nKCk7CiAgICAgICAgc3RhcnRpbmdfbnVtYmVyKys7CiAgICB9KTsKICAgIGlmIChDT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSk7CiAgICB9CiAgICBpZiAoSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPT0gMSkgewogICAgICAgIElOQUNUSVZFX0NPTFVNTl9UT19TT1JUID0gLTE7CiAgICAgICAgc29ydFRhYmxlKDEsICJpbmFjdGl2ZV9jb250ZW50X3BhZ2UiKTsKICAgIH0KfQpmdW5jdGlvbiBjaGFuZ2VDaGFubmVsTnVtYmVyKGVsZW1lbnQpIHsKICAgIHZhciBkYklEID0gZWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQ7CiAgICB2YXIgbmV3TnVtYmVyID0gcGFyc2VGbG9hdChlbGVtZW50LnZhbHVlKTsKICAgIHZhciBjaGFubmVsTnVtYmVycyA9IFtdOwogICAgdmFyIGRhdGEgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdOwogICAgdmFyIGNoYW5uZWxzID0gZ2V0T2JqS2V5cyhkYXRhKTsKICAgIGlmIChpc05hTihuZXdOdW1iZXIpKSB7CiAgICAgICAgYWxlcnQoInt7LmFsZXJ0LmludmFsaWRDaGFubmVsTnVtYmVyfX0iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjaGFubmVscy5mb3JFYWNoKGlkID0+IHsKICAgICAgICB2YXIgY2hhbm5lbE51bWJlciA9IHBhcnNlRmxvYXQoZGF0YVtpZF1bIngtY2hhbm5lbElEIl0pOwogICAgICAgIGNoYW5uZWxOdW1iZXJzLnB1c2goY2hhbm5lbE51bWJlcik7CiAgICB9KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbm5lbE51bWJlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY2hhbm5lbE51bWJlcnMuaW5kZXhPZihuZXdOdW1iZXIpID09IC0xKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoTWF0aC5mbG9vcihuZXdOdW1iZXIpID09IG5ld051bWJlcikgewogICAgICAgICAgICBuZXdOdW1iZXIgPSBuZXdOdW1iZXIgKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbmV3TnVtYmVyID0gbmV3TnVtYmVyICsgMC4xOwogICAgICAgICAgICBuZXdOdW1iZXIudG9GaXhlZCgxKTsKICAgICAgICAgICAgbmV3TnVtYmVyID0gTWF0aC5yb3VuZChuZXdOdW1iZXIgKiAxMCkgLyAxMDsKICAgICAgICB9CiAgICB9CiAgICBkYXRhW2RiSURdWyJ4LWNoYW5uZWxJRCJdID0gbmV3TnVtYmVyLnRvU3RyaW5nKCk7CiAgICBlbGVtZW50LnZhbHVlID0gbmV3TnVtYmVyOwogICAgaWYgKENPTFVNTl9UT19TT1JUID09IDEpIHsKICAgICAgICBDT0xVTU5fVE9fU09SVCA9IC0xOwogICAgICAgIHNvcnRUYWJsZSgxKTsKICAgIH0KICAgIGlmIChJTkFDVElWRV9DT0xVTU5fVE9fU09SVCA9PSAxKSB7CiAgICAgICAgSU5BQ1RJVkVfQ09MVU1OX1RPX1NPUlQgPSAtMTsKICAgICAgICBzb3J0VGFibGUoMSwgImluYWN0aXZlX2NvbnRlbnRfcGFnZSIpOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIGJhY2t1cCgpIHsKICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgY29uc29sZS5sb2coIkJhY2t1cCBkYXRhIik7CiAgICB2YXIgY21kID0gIlRocmVhZGZpbkJhY2t1cCI7CiAgICBjb25zb2xlLmxvZygiU0VORCBUTyBTRVJWRVIiKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHRvZ2dsZUNoYW5uZWxTdGF0dXMoaWQpIHsKICAgIHZhciBlbGVtZW50OwogICAgdmFyIHN0YXR1czsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWN0aXZlIikpIHsKICAgICAgICB2YXIgY2hlY2tib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWN0aXZlIik7CiAgICAgICAgc3RhdHVzID0gKGNoZWNrYm94KS5jaGVja2VkOwogICAgfQogICAgdmFyIGlkcyA9IGdldEFsbFNlbGVjdGVkQ2hhbm5lbHMoKTsKICAgIGlmIChpZHMubGVuZ3RoID09IDApIHsKICAgICAgICBpZHMucHVzaChpZCk7CiAgICB9CiAgICBpZHMuZm9yRWFjaChpZCA9PiB7CiAgICAgICAgdmFyIGNoYW5uZWwgPSBTRVJWRVJbInhlcGciXVsiZXBnTWFwcGluZyJdW2lkXTsKICAgICAgICBjaGFubmVsWyJ4LWFjdGl2ZSJdID0gc3RhdHVzOwogICAgICAgIHN3aXRjaCAoY2hhbm5lbFsieC1hY3RpdmUiXSkgewogICAgICAgICAgICBjYXNlIHRydWU6CiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbFsieC14bWx0di1maWxlIl0gPT0gIi0iIHx8IGNoYW5uZWxbIngtbWFwcGluZyJdID09ICItIikgewogICAgICAgICAgICAgICAgICAgIGlmIChCVUxLX0VESVQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxlcnQoY2hhbm5lbFsieC1uYW1lIl0gKyAiOiBNaXNzaW5nIFhNTFRWIGZpbGUgLyBjaGFubmVsIikKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3guY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNoYW5uZWxbIngtYWN0aXZlIl0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZmFsc2U6CiAgICAgICAgICAgICAgICAvLyBjb2RlLi4uCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGNoYW5uZWxbIngtYWN0aXZlIl0gPT0gZmFsc2UpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJub3RBY3RpdmVFUEciOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmNsYXNzTmFtZSA9ICJhY3RpdmVFUEciOwogICAgICAgIH0KICAgIH0pOwp9CmZ1bmN0aW9uIHJlc3RvcmUoKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpLnJlbW92ZSgpOwogICAgfQogICAgdmFyIHJlc3RvcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTlBVVCIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgcmVzdG9yZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIm5vdFZpc2libGUiKTsKICAgIHJlc3RvcmUuc2V0QXR0cmlidXRlKCJuYW1lIiwgIiIpOwogICAgcmVzdG9yZS5pZCA9ICJ1cGxvYWQiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZXN0b3JlKTsKICAgIHJlc3RvcmUuY2xpY2soKTsKICAgIHJlc3RvcmUub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGZpbGVuYW1lID0gcmVzdG9yZS5maWxlc1swXS5uYW1lOwogICAgICAgIHZhciBjaGVjayA9IGNvbmZpcm0oIkZpbGU6ICIgKyBmaWxlbmFtZSArICJcbnt7LmNvbmZpcm0ucmVzdG9yZX19Iik7CiAgICAgICAgaWYgKGNoZWNrID09IHRydWUpIHsKICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICAgIHZhciBmaWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzWzBdOwogICAgICAgICAgICBpZiAoZmlsZSkgewogICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlYWRlci5yZXN1bHQpOwogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgICAgICAgICAgICAgICAgIHZhciBjbWQgPSAiVGhyZWFkZmluUmVzdG9yZSI7CiAgICAgICAgICAgICAgICAgICAgZGF0YVsiYmFzZTY0Il0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICAgICAgICAgICAgICAgICAgc2VydmVyLnJlcXVlc3QoZGF0YSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgYWxlcnQoIkZpbGUgY291bGQgbm90IGJlIGxvYWRlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc3RvcmUucmVtb3ZlKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9OwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHVwbG9hZExvZ28oKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwbG9hZCcpLnJlbW92ZSgpOwogICAgfQogICAgdmFyIHVwbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklOUFVUIik7CiAgICB1cGxvYWQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgImZpbGUiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIm5vdFZpc2libGUiKTsKICAgIHVwbG9hZC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiIik7CiAgICB1cGxvYWQuaWQgPSAidXBsb2FkIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodXBsb2FkKTsKICAgIHVwbG9hZC5jbGljaygpOwogICAgdXBsb2FkLm9uYmx1ciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBhbGVydCgpOwogICAgfTsKICAgIHVwbG9hZC5vbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmlsZW5hbWUgPSB1cGxvYWQuZmlsZXNbMF0ubmFtZTsKICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICB2YXIgZmlsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ZmlsZV0nKS5maWxlc1swXTsKICAgICAgICBpZiAoZmlsZSkgewogICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlYWRlci5yZXN1bHQpOwogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgICAgICAgICB2YXIgY21kID0gInVwbG9hZExvZ28iOwogICAgICAgICAgICAgICAgZGF0YVsiYmFzZTY0Il0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICAgICAgZGF0YVsiZmlsZW5hbWUiXSA9IGZpbGUubmFtZTsKICAgICAgICAgICAgICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICAgICAgICAgICAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgICAgICAgICAgICAgIHZhciB1cGRhdGVMb2dvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VwZGF0ZS1pY29uJyk7CiAgICAgICAgICAgICAgICB1cGRhdGVMb2dvLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHVwZGF0ZUxvZ28uY2xhc3NOYW1lID0gImNoYW5nZWQiOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYWxlcnQoIkZpbGUgY291bGQgbm90IGJlIGxvYWRlZCIpOwogICAgICAgIH0KICAgICAgICB1cGxvYWQucmVtb3ZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgfTsKfQpmdW5jdGlvbiBjaGVja1VuZG8oa2V5KSB7CiAgICBzd2l0Y2ggKGtleSkgewogICAgICAgIGNhc2UgImVwZ01hcHBpbmciOgogICAgICAgICAgICBpZiAoVU5ETy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CiAgICAgICAgICAgICAgICBTRVJWRVJbInhlcGciXVtrZXldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTkRPW2tleV0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIFVORE9ba2V5XSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoU0VSVkVSWyJ4ZXBnIl1ba2V5XSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHNvcnRTZWxlY3QoZWxlbSkgewogICAgdmFyIHRtcEFyeSA9IFtdOwogICAgdmFyIHNlbGVjdGVkVmFsdWUgPSBlbGVtW2VsZW0uc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykKICAgICAgICB0bXBBcnkucHVzaChlbGVtLm9wdGlvbnNbaV0pOwogICAgdG1wQXJ5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIChhLnRleHQgPCBiLnRleHQpID8gLTEgOiAxOyB9KTsKICAgIHdoaWxlIChlbGVtLm9wdGlvbnMubGVuZ3RoID4gMCkKICAgICAgICBlbGVtLm9wdGlvbnNbMF0gPSBudWxsOwogICAgdmFyIG5ld1NlbGVjdGVkSW5kZXggPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0bXBBcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICBlbGVtLm9wdGlvbnNbaV0gPSB0bXBBcnlbaV07CiAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS52YWx1ZSA9PSBzZWxlY3RlZFZhbHVlKQogICAgICAgICAgICBuZXdTZWxlY3RlZEluZGV4ID0gaTsKICAgIH0KICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IG5ld1NlbGVjdGVkSW5kZXg7IC8vIFNldCBuZXcgc2VsZWN0ZWQgaW5kZXggYWZ0ZXIgc29ydGluZwogICAgcmV0dXJuOwp9CmZ1bmN0aW9uIHVwZGF0ZUxvZygpIHsKICAgIGNvbnNvbGUubG9nKCJUT0tFTiIpOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoInVwZGF0ZUxvZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlX3RzLmpzLm1hcA=="
+ webUI["html/js/network_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL25ldHdvcmtfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNO0lBSVYsWUFBWSxHQUFXO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUVsQixrQ0FBa0M7UUFDbEMsVUFBVTtRQUNWLEdBQUc7UUFFSCxpQkFBaUIsR0FBRyxJQUFJLENBQUE7UUFFeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqQixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDNUIsK0JBQStCO1lBQy9CLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFBO1FBQ3JCLENBQUM7UUFFRCxRQUFRLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsS0FBSyxPQUFPO2dCQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2dCQUN2QixNQUFLO1lBQ1AsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO2dCQUN4QixNQUFLO1FBQ1QsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXpILElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBO1FBQ3RCLElBQUksRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNCLEVBQUUsQ0FBQyxNQUFNLEdBQUc7WUFFVixZQUFZLEdBQUcsSUFB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"
+ webUI["html/video/stream-limit.ts"] = "R0AREABC8CUAAcEAAP8B/wAB/IAUSBIBBkZGbXBlZwlTZXJ2aWNlMDF3fEPK//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQAAQAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABAAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMAdQAAB7DH4AAAAB4AAAgMAKMQAJEKERAAfYYQAAAAEJ8AAAAAFnZAAorNlAeAIn5YpQAAADABAAAAMDIPGDGWAAAAABaOvjyyLAAAABBgX//6vcRem95tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTY0IHIzMTA4IDMxZTE5ZjkgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDIzIC0gaHR0cDovL3dHAQARd3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2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30X9oT0SBBZCI3AtJaE1scGsmpXrX+6L7ECx+XYakivHzMbORwEAFX6jycIYObFMA8cO1RQbKqBjRSwmV6s3Bvymh1Uy2Q4NYGetxxqA4TS9AAsfEnTWSPnioguTXby9YCaR4TjGhn8NBtHaAqal7fT8Mi6Fx48bLZLUw8vE0oyOXRPPZ7YEaZ8VtCcKvfPmIXDe+CICjSg/14litlDqWjesyqV20kGkxEXxFBxQ6opg8rJ5nrXpJ7Yg7f1kVB6kfioI546wX4WiVIHMnIjolv1sVV16hPOoaheE0P72F7ZHAQAW7HIsDRCfdXPaYJO+kI1KnbprbBU8l9EpUeesa13zPgeLsD/2jy8om6zqqaZBpDO3+joQU+lzMfu74FIaVthokTCHq+okILC+gMpWqJ9gii24CxJR1eAEEaVrQma2Vqt0eRRTQKRgUz3U+yFZEROE+9eX4DBqMlOFD6/RPC32sesdhyOVL9peV/fimBhb4rcmjAOm79hlThrtz/TWGfACtvoNRAwACV66tkmnc4GPMdLg0xEkq+1LSEcBADcNAP///////////////5trYpfJL+GISCBj9FiUkOtbkee6L9I58mjnY1y/WDNqht+Qw3+9i+KfyBbjdz/46xUXVuCItwfw/gdYKyy+IjRZiv53kEqW+PD7lPLLRgAAL2BITMTuwQL79Q01wkomp2ZPIBYiBP6WREAZAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAW9R0EAGAAAAeAAAIDACjEACYEhEQAH9IEAAAABCfAAAAABQZokbEO//qmWAAADAAADAAADAAADAAADAAADAAADAhPyO6dd23w9DkWWQJotXSbxVzBxaMjhfbwK5hWmvMGszdWhoszx1x0hDXN8c9BgYxwvxRZXkmrTPV9ZQAAAAwAAAwAAAwAAAwAKyANRq59GNuA0ghi7BmsDn4KOtIcIHn/KA8ZjXdDU0cUWk7qRZwNMMelaC07cZyBZW9BHAQA5EgD//////////////////////472Ji2hDXNKdWiA/xvCwGEXvTeFAvXO+jhlL6AOli2RGJa+ncBbXMf/Fv/nG9TOUvI8v62JTNsuhHbKPEq9HPF4/Uizrx3rjCTMC69d6+VoYrKv6XxKyvGcL7/QDEDKbwk4eCFgJZJEAlH+N25TWR6KYwzkYYgGuXdrBv3UkeA7VHwdf9Xzh5cuSg4ngVmnfeIpA9JsLqp2wIu9AAADAAADAAAIuEdBADoHEAAAiRx+AAAAAeAAAIDACjEACUjhEQAJEKEAAAABCfAAAAABQZ5CeIX/AAADAAADAAADAAADAAADAAADAAADAnzE28Zci1VBf0H4k1nWmJ0ogyjKdI6LAY1zorGVIRF7G8uwAAADAAADAAADAAADAAADAqrZOCXhGzA4u24KPtb92mgjNUnlvc9Xhr0gBo7u2GDR+aPxP9hnLhhlBtu4gqLkmscLxiv7oXnm033sXadVffC0UcIARwEAO64A//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAwAAAwAAM+FHQAARAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABEAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAPCUA////////////////////////////////////////////////AAAB4AAAgIAFIQAJLMEAAAABCfAAAAABAZ5hdEK/AAADAAADAAADAAADAAADAAADAAADA1/+i67DypGtrhJHPx4hDO6/W1t2QWamAxImT0NjhBVoAAADAAADAAADAAADAAAFMUbvocN9sGd3vACpQrs5+mzAC6i5WG4adCZ7bcVeOzo7AFpOoAAAAwAAAwAAMqBHQQA9QhAAAJcsfgD//////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACWUBEQAJSOEAAAABCfAAAAABAZ5jakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAAF+YuLcI2IxJ27WrhAZp7Yh4CElw5RRRGjq0bAAADAAADAABEwUdBAD4uAP///////////////////////////////////////////////////////////wAAAeAAAIDACjEACfGhEQAJZQEAAAABCfAAAAABQZpoSahBaJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAK78A5Ntd6FmvObqU2qkO9/nBjO187SEClZ2zAWMgqZxWCxcqvQx+wgAAADAAADAAU1R0AAEgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAASAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBAD86EAAApTx+AP///////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACblhEQAJgSEAAAABCfAAAAABQZ6GRREsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAB1LjAMsF1v3AJeffDUP0gAbzkVi7LRpW7+1eciThATL+0AAADAAADAAIPR0EAMEYA////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQAJnUEAAAABCfAAAAABAZ6ldEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAOo9u4wKtZ9mouspMor7zADZAcKEUQKmIGN/qFqwAAAMAAAMAA1NHQQAxURAAALNMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEACdWBEQAJuWEAAAABCfAAAAABAZ6nakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABMAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAEwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQAyTgD//////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC2IhEQAJ1YEAAAABCfAAAAABQZqsSahBbJlMCHf//qmWAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAADAAF4+AbzVAAAAwAAAwAAAwBAwEdBADNKEAAAwVx+AP////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAsp4REACfGhAAAAAQnwAAAAAUGeykUVLC//AAADAAADAAADAAADAAADAAADAAADAAE1849qKzqh1YAAAAMAAAMAAAMAAAMAAPrcuImYkdwSCsiv8h6ss58AAAMAAAMAAM+BR0EANFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALDcEAAAABCfAAAAABAZ7pdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAH1fABVCgbyQRhNELHHAAAAMAAAMACyhHQAAUAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABQAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EANVEQAADPbH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAAtGAREACynhAAAAAQnwAAAAAQGe62pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTBHQBERAELwJQABwQAA/wH/AAH8gBRIEgEGRkZtcGVnCVNlcnZpY2UwMXd8Q8r//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADZOAP//////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQAL0qERAAtGAQAAAAEJ8AAAAAFBmvBJqEFsmUwIb//+p4QAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAv/sqEpwAAADAAADAAADAMCBR0EAN0oQAADdfH4A/////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC5phEQALYiEAAAABCfAAAAABQZ8ORRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwABAV2OiZ9R3aIKyK/yHqyznwAAAwAAAwAAz4FHQAAVAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABUAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAOFUA////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgIAFIQALfkEAAAABCfAAAAABAZ8tdEK/AAADAAADAAADAAADAAADAAADAAADAAGl/nWxWSXisAAAAwAAAwAAAwAAAwAAICUVFVNgckQRhNELHHAAAAMAAAMACylHQQA5URAAAOuMfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEAC7aBEQALmmEAAAABCfAAAAABAZ8vakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdBADpRAP//////////////////////////////////////////////////////////////////////////////////////////////////////////AAAB4AAAgMAKMQANQyERAAu2gQAAAAEJ8AAAAAFBmzRJqEFsmUwIZ//+nhAAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAAMAAGVAR0AAFgAAsA0AAcEAAAAB8AAqsQSy//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HUAAWAAKwEgABwQAA4QDwABvhAPAAFb1NVv///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dBADtMEAAA+Zx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADQrhEQAL0qEAAAABCfAAAAABQZ9SRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe1R0EAPFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEAC+7BAAAAAQnwAAAAAQGfcXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0BHQQA9URAAAQesfgD//////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADScBEQANCuEAAAABCfAAAAABAZ9zakK/AAADAAADAAADAAADAAADAAADAAADAAGmdIUc+K9+mAAAAwAAAwAAAwAAAwAADiqA6Jzb5eUjXnNhAAADAAADAAAdMEdAABcAALANAAHBAAAAAfAAKrEEsv//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R1AAFwACsBIAAcEAAOEA8AAb4QDwABW9TVb///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9HQQA+UgD///////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2zoREADScBAAAAAQnwAAAAAUGbeEmoQWyZTAhX//44QAAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABi0dBAD9MEAABFbx+AP///////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAIDACjEADXthEQANQyEAAAABCfAAAAABQZ+WRRUsL/8AAAMAAAMAAAMAAAMAAAMAAAMAAAMAATXzj2orOqHVgAAAAwAAAwAAAwAAAwAAt+76q5wtAchcd/IOszwAAAMAAAMAAAe0R0EAMFYA/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wAAAeAAAICABSEADV9BAAAAAQnwAAAAAQGftXRCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpf51sVkl4rAAAAMAAAMAAAMAAAMAABbufc2kxdx/pBxb4AAAAwAAAwAAU0FHQAAYAACwDQABwQAAAAHwACqxBLL//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0dQABgAArASAAHBAADhAPAAG+EA8AAVvU1W////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////R0EAMVEQAAEjzH4A//////////////////////////////////////////////////////////////////////////////////////////////////8AAAHgAACAwAoxAA2XgREADXthAAAAAQnwAAAAAQGft2pCvwAAAwAAAwAAAwAAAwAAAwAAAwAAAwABpnSFHPivfpgAAAMAAAMAAAMAAAMAAA4qgOic2+XlI15zYQAAAwAAAwAAHTE="
+ webUI["html/css/base.css"] = "KiB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIC1tb3otYXBwZWFyYW5jZTogbm9uZTsKICAtbXMtYXBwZWFyYW5jZTogbm9uZTsKICBmb250LWZhbWlseTogIkFyaWFsIiwgc2Fucy1zZXJpZjsKICBsZXR0ZXItc3BhY2luZzogMnB4Owp9CgovKgo6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgCiAgICBkaXNwbGF5OiBub25lOyAKfQoqLwoKOjotd2Via2l0LXNjcm9sbGJhciB7CiAgd2lkdGg6IDEycHg7CiAgaGVpZ2h0OiAxMnB4Owp9CgoKOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBib3JkZXItcmFkaXVzOiA1cHg7Cgp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgNnB4IHJnYmEoMCwgMCwgMCwgMC42KTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiAjMzMzOwp9Cgo6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCmEgewogIGNvbG9yOiAjMDBFNkZGOwp9CgpodG1sLApib2R5IHsKICBjb2xvcjogI2ZmZjsKICBtYXJnaW46IDBweCBhdXRvOwogIGhlaWdodDogMTAwJTsKICBmb250LXNpemU6IDE0cHg7Cn0KCmgyIHsKICBmb250LXNpemU6IDI0cHg7CiAgbGV0dGVyLXNwYWNpbmc6IDJweDsKfQoKaDMgewogIGZvbnQtc2l6ZTogMjJweDsKICBsZXR0ZXItc3BhY2luZzogMXB4Owp9CgpoNCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgbGluZS1oZWlnaHQ6IDEuNWVtOwoKfQoKaDUgewogIGZvbnQtc2l6ZTogMTZweDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICBtYXJnaW46IDI1cHggMHB4IDEwcHggMHB4Owp9CgpociB7CiAgYm9yZGVyOiAwOwogIGhlaWdodDogMXB4OwogIGJhY2tncm91bmQ6ICMzMzM7CiAgbWFyZ2luOiAxMHB4IDBweDsKfQoKcCB7CiAgbWFyZ2luOiAycHg7CiAgcGFkZGluZzogMnB4IDVweDsKfQoKcHJlIHsKICBtYXJnaW46IDBweCAwcHggNXB4IDBweDsKICBmb250LXNpemU6IDEycHg7CiAgY29sb3I6ICNkZGQ7CiAgbGV0dGVyLXNwYWNpbmc6IDFweDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtdmFyaWFudDogbm9ybWFsOwogIGxpbmUtaGVpZ2h0OiAxLjZlbTsKfQoKbGFiZWwgewogIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgZGlzcGxheTogYmxvY2s7Cn0KCmxpIHsKICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgY3Vyc29yOiBwb2ludGVyOwogIHRyYW5zaXRpb246IGFsbCAwLjM7Cn0KCmxpOmhvdmVyIHsKICBib3JkZXItY29sb3I6ICMwMEU2RkYKfQoKc2VsZWN0IHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgd2lkdGg6IGNhbGMoMTAwJSArIDJweCk7CiAgYm9yZGVyOiBzb2xpZCAwcHggIzAwRTZGRjsKICBib3JkZXItcmFkaXVzOiAwcHg7CiAgb3V0bGluZTogbm9uZTsKICBjb2xvcjogI2ZmZjsKICBwYWRkaW5nOiA5cHggMTBweDsKICBkaXNwbGF5OiBibG9jazsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGZvbnQtc2l6ZTogMTRweDsKICBtYXJnaW46IDVweCAwcHggNXB4IDBweDsKfQoKc2VsZWN0OmZvY3VzIHsKICBvdXRsaW5lOiBub25lOwp9CgppbnB1dCB7CiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogIG1hcmdpbjogMHB4OwogIHBhZGRpbmc6IDIuNXB4IDEwcHg7CiAgb3V0bGluZTogbm9uZTsKICBmb250LXNpemU6IDE0cHg7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXSwKaW5wdXRbdHlwZT1zdWJtaXRdIHsKICBjdXJzb3I6IHBvaW50ZXI7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBtYXJnaW46IDEwcHggMTBweDsKICBwYWRkaW5nOiAxMHB4IDI1cHg7CiAgYm9yZGVyOiBzb2xpZCAwcHg7CiAgYm9yZGVyLWNvbG9yOiAjMDAwOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBvdXRsaW5lOiBub25lOwogIGNvbG9yOiAjZmZmOwp9CgppbnB1dFt0eXBlPWJ1dHRvbl06Zm9jdXMgewogIG91dGxpbmU6IG5vbmU7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXTpob3ZlciB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsKICBjb2xvcjogIzAwMDsKfQoKaW5wdXRbdHlwZT1idXR0b25dOmhvdmVyLmRlbGV0ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogIGNvbG9yOiAjZmZmOwp9CgppbnB1dFt0eXBlPXRleHRdLAppbnB1dFt0eXBlPXNlYXJjaF0sCmlucHV0W3R5cGU9cGFzc3dvcmRdIHsKICBjb2xvcjogI2ZmZjsKICB3aWR0aDogLXdlYmtpdC1jYWxjKDEwMCUgLSAwcHgpOwogIHdpZHRoOiAtbW96LWNhbGMoMTAwJSAtIDBweCk7CiAgd2lkdGg6IGNhbGMoMTAwJSAtIDBweCk7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IHNvbGlkIDFweCB0cmFuc3BhcmVudDsKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICBib3JkZXItYm90dG9tLWNvbG9yOiAjNTU1OwogIGJvcmRlci1yYWRpdXM6IDBweDsKICBwYWRkaW5nOiA4cHggMTBweDsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzAwRTZGRjsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogIGhlaWdodDogMjVweDsKICB3aWR0aDogMjVweDsKICBjdXJzb3I6IHBvaW50ZXI7CiAgLyoKICAtd2Via2l0LWFwcGVhcmFuY2U6IGNoZWNrYm94OwogICovCn0KCmlucHV0W3R5cGU9ImNoZWNrYm94Il06Y2hlY2tlZCB7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwRTZGRjsKICAvKmRpc3BsYXk6IGlubGluZS1ibG9jazsqLwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdOmJlZm9yZSB7CiAgcG9zaXRpb246IGluaXRpYWw7CiAgbGVmdDogMHB4OwogIG1hcmdpbi1sZWZ0OiAtNHB4OwogIGNvbnRlbnQ6ICIgIjsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXTpjaGVja2VkOmJlZm9yZSB7CiAgcG9zaXRpb246IGluaXRpYWw7CiAgbGVmdDogMHB4OwogIG1hcmdpbi1sZWZ0OiAtM3B4OwogIGNvbnRlbnQ6ICLinJMiOwogIGNvbG9yOiAjMDAwOwp9CgppbnB1dFt0eXBlPSJjaGVja2JveCJdLmJ1bGs6Y2hlY2tlZDpiZWZvcmUgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBsZWZ0OiAwcHg7CiAgdG9wOiAtMTFweDsKICBtYXJnaW4tbGVmdDogLTNweDsKICBjb250ZW50OiAi4pyTIjsKICBmb250LXNpemU6IDEuNWVtOwogIGNvbG9yOiAjMDAwOwp9CgoKaW5wdXRbdHlwZT1idXR0b25dLmNhbmNlbCB7CgogIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogIGJvcmRlci1jb2xvcjogcmVkOwp9CgppbnB1dFt0eXBlPWJ1dHRvbl0uc2F2ZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsKICBmbG9hdDogcmlnaHQ7Cn0KCgppbnB1dFt0eXBlPWJ1dHRvbl0uYmxhY2ssCmlucHV0W3R5cGU9c3VibWl0XS5ibGFjayB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICBib3JkZXItY29sb3I6ICMwMDA7Cn0KCmlucHV0W3R5cGU9YnV0dG9uXS5jZW50ZXIgewogIG1hcmdpbi1yaWdodDogYXV0bzsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogIGJvcmRlci1jb2xvcjogIzAwMDsKfQoKLnBvaW50ZXIgewogIGN1cnNvcjogcG9pbnRlcjsKfQoKLnBvaW50ZXI6aG92ZXIgewogIGNvbG9yOiAjMDBFNkZGOwogIGN1cnNvcjogcG9pbnRlcjsKfQoKLnNvcnRUaGlzIHsKICBjb2xvcjogIzAwRTZGRjsKfQoKLnc0MHB4IHsKICBtYXgtd2lkdGg6IDQwcHg7Cn0KCi53NTBweCB7CiAgbWF4LXdpZHRoOiA1MHB4Owp9CgoudzgwcHggewogIG1heC13aWR0aDogODBweDsKfQoKLncxNTBweCB7CiAgbWF4LXdpZHRoOiAxNTBweDsKfQoKLncyMDBweCB7CiAgbWF4LXdpZHRoOiAyMDBweDsKICBtaW4td2lkdGg6IDEwMHB4OwogIHdpZHRoOiAyMDBweDsKICBvdmVyZmxvdy14OiBoaWRkZW47CiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICBvdmVyZmxvdzogaGlkZGVuOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoudzMwMHB4IHsKICBtYXgtd2lkdGg6IDMwMHB4Owp9CgoudzIyMHB4IHsKICBtYXgtd2lkdGg6IDIyMHB4OwogIGN1cnNvcjogYWxpYXM7Cn0KCi5mb290ZXIgewogIGZvbnQtc2l6ZTogMTBweDsKfQoKLmNlbnRlciB7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cgouc2NyZWVuTG9nSGlkZGVuIHsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsIC0xMTBweCk7Cn0KCi5ib3JkZXJTcGFjZSB7CiAgbWFyZ2luLWJvdHRvbTogMzBweDsKfQoKLmJsb2NrIHt9Cgoubm9uZSB7CiAgZGlzcGxheTogbm9uZTsKfQoKCi5ub3RWaXNpYmxlIHsKICBoZWlnaHQ6IDBweDsKICBkaXNwbGF5OiBub25lOwogIG9wYWNpdHk6IDA7CiAgYm9yZGVyLWJvdHRvbTogIzAwMCBzb2xpZCAwcHg7Cgp9CgoudmlzaWJsZSB7CiAgb3BhY2l0eTogMTsKICBkaXNwbGF5OiBibG9jazsKICBib3JkZXItYm90dG9tOiAjNDQ0IHNvbGlkIDFweDsKICBwYWRkaW5nOiAxMHB4Owp9CgouZmxvYXRSaWdodCB7CiAgZmxvYXQ6IHJpZ2h0Owp9CgouZmxvYXRMZWZ0IHsKICBmbG9hdDogbGVmdDsKfQoKLm1lbnUtYWN0aXZlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDBFNkZGOwp9Cgp0YWJsZSB7CiAgd2lkdGg6IDEwMCUKfQoKLm1lbnUtbm90QWN0aXZlIHt9CgojYnJhbmNoIHsKICBjb2xvcjogcmVkOwp9CgojaW50ZXJhY3Rpb24gewogIG1hcmdpbi1ib3R0b206IDEwMHB4OwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBib3JkZXItYm90dG9tOiBzb2xpZCAwcHggIzc3NzsKfQoKCi5oYWxmIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNDUlOwp9CgoubWVudSB7CiAgYm9yZGVyOiBzb2xpZCAxcHggIzAwRTZGRjsKfQoKLmluZm9Nc2cgewogIGNvbG9yOiAjYWFhOwp9CgouZXJyb3JNc2cgewogIGNvbG9yOiByZWQ7Cn0KCi53YXJuaW5nTXNnIHsKICBjb2xvcjogeWVsbG93Owp9CgouZGVidWdNc2cgewogIGNvbG9yOiBtYWdlbnRhOwp9CgoKLmNhdGVnb3J5IHsKICBib3JkZXItbGVmdDogc29saWQgMnB4Cn0KCi5uZXdzIHsKICBib3JkZXItY29sb3I6IHRvbWF0bwp9CgoubW92aWUgewogIGJvcmRlci1jb2xvcjogcm95YWxibHVlOwp9Cgouc2VyaWVzIHsKICBib3JkZXItY29sb3I6IGdvbGQ7Cn0KCi5zcG9ydHMgewogIGJvcmRlci1jb2xvcjogeWVsbG93Z3JlZW47Cn0KCi5raWRzIHsKICBib3JkZXItY29sb3I6IG1lZGl1bXB1cnBsZTsKfQoKLyogTG9hZGluZyAqLwojbG9hZGluZyB7CiAgbGVmdDogMHB4OwogIHRvcDogMHB4OwogIHotaW5kZXg6IDEwMDAwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgbWFyZ2luOiBhdXRvOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKCi5sb2FkZXIgewogIGJvcmRlcjogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogIGJvcmRlci1yYWRpdXM6IDUwJTsKICBib3JkZXItdG9wOiA1cHggc29saWQgIzAwRTZGRjsKICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwRTZGRjsKICB3aWR0aDogNTBweDsKICBoZWlnaHQ6IDUwcHg7CiAgLXdlYmtpdC1hbmltYXRpb246IHNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7CiAgYW5pbWF0aW9uOiBzcGluIDEuMnMgbGluZWFyIGluZmluaXRlOwoKICBwb3NpdGlvbjogZml4ZWQ7CiAgbWFyZ2luOiBhdXRvOwoKICB0b3A6IDA7CiAgcmlnaHQ6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7Cgp9CgpALXdlYmtpdC1rZXlmcmFtZXMgc3BpbiB7CiAgMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CgogIDEwMCUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOwogIH0KfQoKQGtleWZyYW1lcyBzcGluIHsKICAwJSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsKICB9CgogIDEwMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICB9Cn0="
+ webUI["html/img/xmltv.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQyMDowNzozMzwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Co6j9bsAAAGgSURBVGgF7VqxTsNADL0gYGEon8DOwsbAAH8BYmJn6cYIn8DC3h0+oixISFRiYYCJL0AwMMBAeK5w2rpV6uikxHfYknW98+vds18TK21DWGBlWR7CH+BfcEv2AzLP8HP42gLqkyUATuEp2PWEdQjF9ATs1zF/g29Mrxt+vVcUxR3xWxEktzFPJQmivsv8ZSI9DiQyVnxlIonwn6fpiczXpNuVVXH8O+a3Ys3y9NUyuf/NTTbEHZTjUlGSRzSiPhroUIENwB4AS/vS/susDwDhTpYBER9g7wHh5DWyibV9CiitCZbIafDEYUuJHQI3Nr/9ciWsjK6IFSWYhyvClbAyZqOIlYJG84jq7E1Ot97Zm+TinV1TrWwudk9EI3ebGFekzWprzspGEU2ySWCiOrs/s9dr7M/s9fVJJJrNXcsTsfaJc0WsKZINH+/sf1Jqvl1n1f2ZnStRN/pdq646XcSkIh9dkIg4s+IrE3nCpp8RG7f91ns+cCYR/LD4jcAZB42PN+A7/mcQ8ZxJhBYQvMJwBB/BKTFLVoLMC/wCfgyv7BesTKUC2LKM3wAAAABJRU5ErkJggg=="
+ webUI["html/js/settings_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3NfdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9zZXR0aW5nc190cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGdCQUFnQjtJQUF0QjtRQUNFLGVBQVUsR0FBVyxrQkFBa0IsQ0FBQTtJQTR3QnpDLENBQUM7SUEzd0JDLHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUN6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFDLElBQUksT0FBTyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQzlDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxQyxRQUFRLFdBQVcsRUFBRSxDQUFDO1lBRXBCLGVBQWU7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDekMsTUFBTSxDQUFDLFNBQVMsR0FBRyw0QkFBNEIsR0FBRyxHQUFHLENBQUE7Z0JBRXJELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQzFDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENB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"
+ webUI["html/login.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyBzdGlja3ktdG9wIG5hdmJhci1kYXJrIGJnLWJsYWNrIj4KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii93ZWIiPgogICAgICAgIDxzcGFuIGlkPSJsb2dvIj48L3NwYW4+CiAgICAgIDwvYT4KICAgIDwvZGl2PgogIDwvbmF2PgogIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGNhcmQgdGV4dC1iZy1kYXJrIG1iLTMiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPgogICAgICAgICAgICA8aDM+e3subG9naW4uaGVhZGxpbmV9fTwvaDM+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgIDxwIGlkPSJlcnIiIGNsYXNzPSJlcnJvck1zZyBjZW50ZXIiPnt7LmF1dGhlbnRpY2F0aW9uRXJyfX08L3A+CiAgICAgICAgICAgIDxmb3JtIGlkPSJhdXRoZW50aWNhdGlvbiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICA8aDU+e3subG9naW4udXNlcm5hbWUudGl0bGV9fTo8L2g1PgogICAgICAgICAgICAgIDxpbnB1dCBpZD0idXNlcm5hbWUiIHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0iVXNlcm5hbWUiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDxoNT57ey5sb2dpbi5wYXNzd29yZC50aXRsZX19OjwvaDU+CiAgICAgICAgICAgICAgPGlucHV0IGlkPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiIHZhbHVlPSIiPgogICAgICAgICAgICAgIDxpbnB1dCBpZD0ic3VibWl0IiBjbGFzcz0iIiB0eXBlPSJzdWJtaXQiIG9uc3VibWl0PSJqYXZhc2NyaXB0OmxvZ2luKCk7IiB2YWx1ZT0ie3suYnV0dG9uLmxvZ2lufX0iPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9uZXR3b3JrX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYXV0aGVudGljYXRpb25fdHMuanMiPjwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+"
+ webUI["html/maintenance.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keT4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KCiAgPGRpdiBpZD0iYm94Ij4KCiAgICA8ZGl2IGlkPSJoZWFkbGluZSI+CiAgICAgIDxoMSBpZD0iaGVhZC10ZXh0IiBjbGFzcz0iY2VudGVyIj5NYWludGVuYW5jZTwvaDE+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgICAgVGhyZWFkZmluIGlzIHVwZGF0aW5nIHRoZSBkYXRhYmFzZSwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPjwvZGl2PgoKICA8L2Rpdj4KCjwvYm9keT4KCjwvaHRtbD4="
+ webUI["html/img/filter.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNy0yOFQxOTowNzo2OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cs038OQAAAOISURBVGgF5ZpLSBVRGMfvvfmqCKKiKCqKtE3SQ8haJJm1ctPCZYHrFhXtohcUBLVsU1BRBJKLXpsSKs1aCL1oUUhvMgIloodZKmLZ72+OzNVx7jzOXGfqg/89Z875zv/7f35n7px7vanUP2JptzyGhoYKmK8GW0EZmA/mgW7wHrwDN0BTOp0epPVtxBBnLdgIVoE5YBboBR2gDTTA/5DWn0FeDPaBz8CLdeF0EBR5jYRvKbgABoAXa8Opwit/CudK8NoLs4PPM8ZyBsNnB/jpsD7X0C8cjgDXnaQkqkEPCGMSuGWivxxzx8OQj6xtpHWuPhPloHfEMWzTD0HN2GQY2xuW2Lb+/Fh+VaIQPLE5meh+gmSxFYz+BjBogtjGscfiH26Z2GmbNNltVQAIpwDdP6ZNO2iRYqTpZGhfgWUaiMC2w1kCzkbALcqLvDVvUyK6MW9HFES0b8BvsFwXEZi4F+iBtykCcjtlqf0igr52VJ1eqiIgzzdlrRIZfWfJd3SD8ZbqHvkB4XSDpJNB9V0VcX/cT4Ys/zEzSuSj/3WxW9GpRD7ETpZ/QcOJ6LyfdHugitxNehbob9G7lo4PXWBmQhPqQ/fsDOeUfjqNCU1Csi+TQ5+2luzc3yaRr6elevQZwhZr4bomYam0U41yabYqov5hvSTMjlp6RyuiAarSTLPZmox5246+lVREx/isiuh6NxhUJwF2yEpCWu1bK8WEsjyRgCSa0XrVrjNra2mC7TWD5ilYAuJoA4jSlnppF5dVEU3g0ENTD4b3nsZiZsfGJuGqj8qY+CINGqP2GLZCJ+HjtpblxAJ9k3cPrLfGJrnVUaSCarxw0jFua1lOLNBerANx+byya6IkLM2uLZWpAl6/Mcc1EjvjKtLrJNLqI5HnjfQ+bsVeteb0g2y/t7hGvd7CNjenOL8OkJ40KtOdTF+Cl/nV6Mkf4gxocI9vZPYLLKs9iQrqRIACcM2IXGeSboYrg+rztY5ARaDJWUeo0W+sXudLTFhnApaAW6FkZy/+yuXasLoCrSfwVHAnW0+gK93YawKJMLUIAdNAKwhqnSxcYUpPKB6EBE2mg7VR///EX24jybTQerXnOC70FyVP3gjTPXPTQyaP8NFPNeJrCNTPP667JKOq6VNo/A2hes5ccUjmEmPmDoD5+FMgWCcA+3FG57QJP//kQ1PgGBIOToEDgUn+t4V/AJeGknwARIKLAAAAAElFTkSuQmCC"
webUI["html/img/logo_b_880x200.png"] = "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"
+ webUI["html/img/stream-limit.jpg"] = "/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjItYzAwMCA3OS4xYjY1YTc5YjQsIDIwMjIvMDYvMTMtMjI6MDE6MDEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMy41IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIyQTc2MDAzNDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIyQTc2MDA0NDY4RDExRUQ5OTdEOUJDNDNENTJERDJCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjJBNzYwMDE0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjJBNzYwMDI0NjhEMTFFRDk5N0Q5QkM0M0Q1MkREMkIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8NDxcbFBAQFBsfFxcXFxcfHhcaGhoaFx4eIyUnJSMeLy8zMy8vQEBAQEBAQEBAQEBAQEBAAREPDxETERUSEhUUERQRFBoUFhYUGiYaGhwaGiYwIx4eHh4jMCsuJycnLis1NTAwNTVAQD9AQEBAQEBAQEBAQED/wAARCAQ4B4ADASIAAhEBAxEB/8QAtAABAAIDAQEBAAAAAAAAAAAAAAYHAwQFAgEIAQEAAwEBAQAAAAAAAAAAAAAAAwQFAQIGEAEAAgEDAQMFCwgIAwcDBQEAAQIDEQQFEiExBkFRcRMHYYGRIjJScrIzNDahsXOzFHQVNcHRQmKCkiOTVBYX4aLC4kNTw9LTJPBjg0RVJREBAAIBAgIIBQQCAgMAAAAAAAECAxEEMRIhUXEiMhMzBUFhUnI0gZGhI0JisRTB0RX/2gAMAwEAAhEDEQA/AK/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxPCHhTgeT4HBvN7tfW7i9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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q=="
+ webUI["html/js/configuration_ts.js"] = "Y2xhc3MgV2l6YXJkQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5Eb2N1bWVudElEID0gImNvbnRlbnQiOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnlIZWFkbGluZSh2YWx1ZSkgewogICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSDQiKTsKICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfQp9CmNsYXNzIFdpemFyZEl0ZW0gZXh0ZW5kcyBXaXphcmRDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcihrZXksIGhlYWRsaW5lKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmhlYWRsaW5lID0gaGVhZGxpbmU7CiAgICAgICAgdGhpcy5rZXkgPSBrZXk7CiAgICB9CiAgICBjcmVhdGVXaXphcmQoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBrZXkgPSB0aGlzLmtleTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGVzY3JpcHRpb247CiAgICAgICAgdmFyIGRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuRG9jdW1lbnRJRCk7CiAgICAgICAgZG9jLmlubmVySFRNTCA9ICIiOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZChoZWFkbGluZSk7CiAgICAgICAgc3dpdGNoIChrZXkpIHsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dC5wdXNoKGkpOwogICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIjEiLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgIlhFUEciLCBrZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAid2l6YXJkIik7CiAgICAgICAgICAgICAgICBzZWxlY3QuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gInt7LndpemFyZC5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibTN1IjoKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCBrZXksICIiKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3sud2l6YXJkLm0zdS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLm0zdS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4bWx0diI6CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0Iiwga2V5LCAiIik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LndpemFyZC54bWx0di5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgIndpemFyZCIpOwogICAgICAgICAgICAgICAgaW5wdXQuaWQgPSBrZXk7CiAgICAgICAgICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAie3sud2l6YXJkLnhtbHR2LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhrZXkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTsKICAgICAgICBwcmUuaW5uZXJIVE1MID0gZGVzY3JpcHRpb247CiAgICAgICAgZG9jLmFwcGVuZENoaWxkKHByZSk7CiAgICAgICAgY29uc29sZS5sb2coaGVhZGxpbmUsIGtleSk7CiAgICB9Cn0KZnVuY3Rpb24gcmVhZHlGb3JDb25maWd1cmF0aW9uKHdpemFyZCkgewogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoImdldFNlcnZlckNvbmZpZyIpOwogICAgc2VydmVyLnJlcXVlc3QobmV3IE9iamVjdCgpKTsKICAgIHNob3dFbGVtZW50KCJsb2FkaW5nIiwgZmFsc2UpOwogICAgY29uZmlndXJhdGlvbldpemFyZFt3aXphcmRdLmNyZWF0ZVdpemFyZCgpOwp9CmZ1bmN0aW9uIHNhdmVXaXphcmQoKSB7CiAgICB2YXIgY21kID0gInNhdmVXaXphcmQiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iik7CiAgICB2YXIgY29uZmlnID0gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIndpemFyZCIpOwogICAgdmFyIHdpemFyZCA9IG5ldyBPYmplY3QoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnRhZ05hbWUpIHsKICAgICAgICAgICAgY2FzZSAiU0VMRUNUIjoKICAgICAgICAgICAgICAgIG5hbWUgPSBjb25maWdbaV0ubmFtZTsKICAgICAgICAgICAgICAgIHZhbHVlID0gY29uZmlnW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgd2l6YXJkW25hbWVdID0gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIklOUFVUIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAoY29uZmlnW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNvbmZpZ1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbmZpZ1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gbmFtZS50b1VwcGVyQ2FzZSgpICsgIjogIiArICJ7ey5hbGVydC5taXNzaW5nSW5wdXR9fSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpemFyZFtuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gY29kZS4uLgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgdmFyIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICBkYXRhWyJ3aXphcmQiXSA9IHdpemFyZDsKICAgIHZhciBzZXJ2ZXIgPSBuZXcgU2VydmVyKGNtZCk7CiAgICBzZXJ2ZXIucmVxdWVzdChkYXRhKTsKICAgIGNvbnNvbGUubG9nKGRhdGEpOwp9Ci8vIFdpemFyZAp2YXIgY29uZmlndXJhdGlvbldpemFyZCA9IG5ldyBBcnJheSgpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oInR1bmVyIiwgInt7LndpemFyZC50dW5lci50aXRsZX19IikpOwpjb25maWd1cmF0aW9uV2l6YXJkLnB1c2gobmV3IFdpemFyZEl0ZW0oImVwZ1NvdXJjZSIsICJ7ey53aXphcmQuZXBnU291cmNlLnRpdGxlfX0iKSk7CmNvbmZpZ3VyYXRpb25XaXphcmQucHVzaChuZXcgV2l6YXJkSXRlbSgibTN1IiwgInt7LndpemFyZC5tM3UudGl0bGV9fSIpKTsKY29uZmlndXJhdGlvbldpemFyZC5wdXNoKG5ldyBXaXphcmRJdGVtKCJ4bWx0diIsICJ7ey53aXphcmQueG1sdHYudGl0bGV9fSIpKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uZmlndXJhdGlvbl90cy5qcy5tYXA="
+ webUI["html/js/logs_ts.js.map"] = "eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nc190cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2xvZ3NfdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxHQUFHO0lBRVAsU0FBUyxDQUFDLEtBQVk7UUFFcEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQTtRQUNsQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUE7UUFDaEMsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFBO1FBQ2hDLENBQUM7UUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUV6QixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0NBRUY7QUFFRCxTQUFTLFFBQVEsQ0FBQyxNQUFjO0lBRTlCLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7SUFFbkIsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQy9CLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUE7SUFFaEQsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFbEIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFFbkIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUV0QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRW5CLENBQUMsQ0FBQyxDQUFDO0lBRUgsVUFBVSxDQUFDO1FBRVQsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFFbkIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFFM0MsQ0FBQztJQUVILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVULENBQUM7QUFFRCxTQUFTLFNBQVM7SUFFaEIsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFBO0lBQ3JCLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7SUFDdkIsSUFBSSxNQUFNLEdBQVUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUV0QixDQUFDIn0="
+ webUI["html/js/settings_ts.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICB9CiAgICBjcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJINCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVIUigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhSIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVtzZXR0aW5nc0tleV07CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0ZWluZ2FiZW4KICAgICAgICAgICAgY2FzZSAidXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVwZGF0ZSIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVwZGF0ZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImJhY2t1cC5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJhY2t1cFBhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudGVtcFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInRlbXAucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy50bXBQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVzZXIuYWdlbnQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudXNlckFnZW50LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYnVmZmVyLnRpbWVvdXQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImZmbXBlZy5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJmZm1wZWcub3B0aW9ucyIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ2bGMucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudmxjUGF0aC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidmxjLnBhdGgiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudmxjUGF0aC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLm9wdGlvbnMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnZsY09wdGlvbnMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInZsYy5vcHRpb25zIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnZsY09wdGlvbnMucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpc3RlbmluZ0lwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5saXN0ZW5pbmdJcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAibGlzdGVuaW5nSXAiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MubGlzdGVuaW5nSXAucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIENoZWNrYm94ZW4KICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ud2ViIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbldFQi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ucG1zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblBNUy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbk0zVS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ueG1sIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblhNTC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24uYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsZXMudXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5maWxlc1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2FjaGUuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5jYWNoZUltYWdlcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlRW1wdHlJbWFnZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlQ2hhbm5lbFRpdGxlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJvbWl0UG9ydHMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLm9taXRQb3J0cy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZm9yY2VIdHRwcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZm9yY2VIdHRwcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidXNlSHR0cHMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnVzZUh0dHBzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0aHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnRocmVhZGZpbkRvbWFpbi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidGhyZWFkZmluRG9tYWluIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkb21haW5Vc2VIdHRwcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZG9tYWluVXNlSHR0cHMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVuYWJsZU5vbkFzY2lpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5lbmFibGVOb25Bc2NpaS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZXBnQ2F0ZWdvcmllcyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiZXBnQ2F0ZWdvcmllcyIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXNDb2xvcnMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXNDb2xvcnMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImVwZ0NhdGVnb3JpZXNDb2xvcnMiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUaHJlYWRmaW5BdXRvVXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5UaHJlYWRmaW5BdXRvVXBkYXRlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzc2RwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zc2RwLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkdW1teSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZHVtbXkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImR1bW15Q2hhbm5lbCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZHVtbXlDaGFubmVsLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBQViIsICIzMCBNaW51dGVzIiwgIjYwIE1pbnV0ZXMiLCAiOTAgTWludXRlcyIsICIxMjAgTWludXRlcyIsICIxODAgTWludXRlcyIsICIyNDAgTWludXRlcyIsICIzNjAgTWludXRlcyJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiUFBWIiwgIjMwX01pbnV0ZXMiLCAiNjBfTWludXRlcyIsICI5MF9NaW51dGVzIiwgIjEyMF9NaW51dGVzIiwgIjE4MF9NaW51dGVzIiwgIjI0MF9NaW51dGVzIiwgIjM2MF9NaW51dGVzIl07CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJpZ25vcmVGaWx0ZXJzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5pZ25vcmVGaWx0ZXJzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJhcGkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmFwaS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgLy8gU2VsZWN0CiAgICAgICAgICAgIGNhc2UgInR1bmVyIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy50dW5lci50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDA7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRleHQucHVzaChpKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ1NvdXJjZSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZXBnU291cmNlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIlBNUyIsICJYRVBHIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLmtlZXAiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cEtlZXAudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsiNSIsICIxMCIsICIyMCIsICIzMCIsICI0MCIsICI1MCJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiNSIsICIxMCIsICIyMCIsICIzMCIsICI0MCIsICI1MCJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyLnNpemUua2IiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJ1ZmZlclNpemUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsiMC41IE1CIiwgIjEgTUIiLCAiMiBNQiIsICIzIE1CIiwgIjQgTUIiLCAiNSBNQiIsICI2IE1CIiwgIjcgTUIiLCAiOCBNQiJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiNTEyIiwgIjEwMjQiLCAiMjA0OCIsICIzMDcyIiwgIjQwOTYiLCAiNTEyMCIsICI2MTQ0IiwgIjcxNjgiLCAiODE5MiJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IFsie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmFsc2V9fSIsICJGRm1wZWc6ICh7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuaW5mb19mZm1wZWd9fSkiLCAiVkxDOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fdmxjfX0pIl07CiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gWyItIiwgImZmbXBlZyIsICJ2bGMiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInVkcHh5IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidWRweHkiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudWRweHkucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZXR0aW5nOwogICAgfQogICAgY3JlYXRlRGVzY3JpcHRpb24oc2V0dGluZ3NLZXkpIHsKICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwogICAgICAgIHZhciB0ZXh0OwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NLZXkpIHsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ud2ViIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25XRUIuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25NM1UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ucG1zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25QTVMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ueG1sIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXV0aGVudGljYXRpb25YTUwuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24uYXBpIjoKICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uQVBJLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlRocmVhZGZpbkF1dG9VcGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5UaHJlYWRmaW5BdXRvVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpc3RlbmluZ0lwIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MubGlzdGVuaW5nSXAuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLmtlZXAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBLZWVwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYmFja3VwUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0ZW1wLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50ZW1wUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zdHJlYW1CdWZmZXJpbmcuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyLnNpemUua2IiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5idWZmZXJTaXplLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInN0b3JlQnVmZmVySW5SQU0iOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm9taXRQb3J0cyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLm9taXRQb3J0cy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUh0dHBzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZm9yY2VIdHRwcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VIdHRwcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnVzZUh0dHBzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRocmVhZGZpbkRvbWFpbiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnRocmVhZGZpbkRvbWFpbi5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmVuYWJsZU5vbkFzY2lpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXNDb2xvcnMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci50aW1lb3V0IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudXNlckFnZW50LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZmZtcGVnUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcub3B0aW9ucyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZmbXBlZ09wdGlvbnMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXBpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNzZHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zc2RwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVzLnVwZGF0ZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNhY2hlLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidWRweHkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5oZWFkbGluZSA9IGhlYWRsaW5lOwogICAgICAgIHRoaXMuc2V0dGluZ3NLZXlzID0gc2V0dGluZ3NLZXlzOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBzZXR0aW5nc0tleXMgPSB0aGlzLnNldHRpbmdzS2V5czsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgICAgIC8vIFRhYmVsbGUgZsO8ciBkaWUgS2F0ZWdvcmllIGVyc3RlbGxlbgogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdmFyIGtleXMgPSBzZXR0aW5nc0tleXMuc3BsaXQoIiwiKTsKICAgICAgICBrZXlzLmZvckVhY2goc2V0dGluZ3NLZXkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVNldHRpbmdzKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUhSKCkpOwogICAgfQp9CmZ1bmN0aW9uIHNob3dTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTRVRUSU5HUyIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc0NhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc2V0dGluZ3NDYXRlZ29yeVtpXS5jcmVhdGVDYXRlZ29yeSgpOwogICAgfQp9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTYXZlIFNldHRpbmdzIik7CiAgICB2YXIgY21kID0gInNhdmVTZXR0aW5ncyI7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfc2V0dGluZ3MiKTsKICAgIHZhciBzZXR0aW5ncyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICB2YXIgbmV3U2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NbaV0udGFnTmFtZSkgewogICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsic2V0dGluZ3MiXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldHRpbmdzX3RzLmpzLm1hcA=="
+ webUI["html/configuration.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgogIDx0aXRsZT5UaHJlYWRmaW48L3RpdGxlPgogIDxsaW5rCiAgICByZWw9InN0eWxlc2hlZXQiCiAgICBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9mb250LWF3ZXNvbWUvNS4xNC4wL2Nzcy9hbGwubWluLmNzcyIKICAvPgogIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIGludGVncml0eT0ic2hhMzg0LWdIMnlJSnFLZE5IUEVxMG40TXFhL0hHS0loU2tJSGVMNUF5aGtZVjhpNTlVNUFSNmNzQnZBcEhITmwvdkkxQngiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3NjcmVlbi5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9iYXNlLmNzcyIgdHlwZT0idGV4dC9jc3MiPgo8L2hlYWQ+Cgo8Ym9keSBvbmxvYWQ9ImphdmFzY3JpcHQ6IHJlYWR5Rm9yQ29uZmlndXJhdGlvbigwKTsiPgoKICA8ZGl2IGlkPSJsb2FkaW5nIiBjbGFzcz0ibW9kYWwgZmFkZSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbG9hZGVyIj48L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJtb2RhbCBmYWRlIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC14bCI+CiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciIgaWQ9InBvcHVwX2hlYWRlciI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgIDxkaXYgaWQ9InBvcHVwLWN1c3RvbSI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIiBpZD0icG9wdXBfZm9vdGVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iaW1nQ2VudGVyIj48L2Rpdj4KICA8ZGl2IGlkPSJib3giPgoKICAgIDxkaXYgaWQ9ImhlYWRsaW5lIj4KICAgICAgPGgxIGlkPSJoZWFkLXRleHQiIGNsYXNzPSJjZW50ZXIiPkNvbmZpZ3VyYXRpb248L2gxPgogICAgPC9kaXY+CiAgICA8cCBpZD0iZXJyIiBjbGFzcz0iZXJyb3JNc2cgY2VudGVyIj48L3A+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KCiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJveC1mb290ZXIiPgogICAgICA8aW5wdXQgaWQ9Im5leHQiIGNsYXNzPSIiIHR5cGU9ImJ1dHRvbiIgbmFtZT0ibmV4dCIgdmFsdWU9Ik5leHQiIG9uY2xpY2s9ImphdmFzY3JpcHQ6IHNhdmVXaXphcmQoKTsiPgogICAgPC9kaXY+CiAgPC9kaXY+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMi4wL2Rpc3QvanMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiIGludGVncml0eT0ic2hhMzg0LUEzckpEODU2S293U2I3ZHdsWmRZRWtPMzlHYWdpN3ZJc0YwanJSQW9RbURLS3RRQkhVdUxaOUFzU3Y0akQ0WGEiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9jbGlwYm9hcmQuanMvMi4wLjEwL2NsaXBib2FyZC5taW4uanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9jb25maWd1cmF0aW9uX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvbmV0d29ya190cy5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL21lbnVfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9zZXR0aW5nc190cy5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL2Jhc2VfdHMuanMiPjwvc2NyaXB0Pgo8L2JvZHk+Cgo8L2h0bWw+"
webUI["html/img/threadfin.ico"] = "AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/yMXTf/LF03/xxdN/xwXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/gBdN//8XTf/zF03/YRdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/hRdN//8XTf/zF03/YhdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXTf8AF03/hRdN//8XTf/zF03/YhdN/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdN/wAXTf+FF03//xdN//MXTf9iF03/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF03/ABdN/4UXTf//F03/8xdN/2IXTf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWTP8AFkz/hRZM//8WTP/zFkz/YhZM/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1e/wAtXv+FLV7//y1e//MtXv9iLV7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcJP/AHCT/4Vwk///cJP/83CT/2Jwk/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/0P8Av9D/hb/Q//+/0P/zv9D/Yr/Q/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPT3/wD09/+F9Pf///T3//P09/9i9Pf/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2tfNANrXzYXa183/2tfN89rXzWLa180AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB6eHUAenh1hXp4df96eHXzenh1Ynp4dQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbhVtbW/9bW1vzW1tbYltbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1uFW1tb/1tbW/NbW1tiW1tbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbW4VbW1v/W1tb81tbW2JbW1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbDFtbWxNbW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sNW1tbjltbW/9bW1v0W1tbbltbWw5bW1sTW1tbE1tbWxNbW1sTW1tbE1tbWxNbW1sTW1tbDFtbWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbW1sAW1tbD1tbW0dbW1ubW1tbx1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8JbW1vjW1tb/1tbW/xbW1vbW1tbw1tbW8RbW1vEW1tbxFtbW8RbW1vEW1tbxFtbW8dbW1ubW1tbRFtbWw5bW1sAAAAAAAAAAAAAAAAAAAAAAFtbWwBbW1sxW1tb7VtbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1v/W1tb/1tbW/9bW1vkW1tbLVtbWwAAAAAAAAAAAAAAAAAAAAAAW1tbAFtbWw1bW1s/W1tboFtbW9FbW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vOW1tbzltbW85bW1vRW1tboFtbWz1bW1sMW1tbAAAAAAAAAAAA//w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w////8P////D////w///gAAB/gAAAH4AAAB+AAAAc="
+ webUI["html/img/threadfin.png"] = "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"
+ webUI["html/index.html"] = "PCFkb2N0eXBlIGh0bWw+CjxodG1sPgoKPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDwhLS0tCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4gCiAgICAtLT4KICA8dGl0bGU+VGhyZWFkZmluPC90aXRsZT4KICA8IS0tIGZvbnQtYXdlc29tZSAtLT4KICA8bGluawogICAgcmVsPSJzdHlsZXNoZWV0IgogICAgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZm9udC1hd2Vzb21lLzUuMTQuMC9jc3MvYWxsLm1pbi5jc3MiCiAgLz4KICA8bGluayBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2Jvb3RzdHJhcEA1LjIuMC9kaXN0L2Nzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBpbnRlZ3JpdHk9InNoYTM4NC1nSDJ5SUpxS2ROSFBFcTBuNE1xYS9IR0tJaFNrSUhlTDVBeWhrWVY4aTU5VTVBUjZjc0J2QXBISE5sL3ZJMUJ4IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zY3JlZW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvYmFzZS5jc3MiIHR5cGU9InRleHQvY3NzIj4KICA8bGluayByZWw9Imljb24iIGhyZWY9ImltZy90aHJlYWRmaW4uaWNvIj4KCjwvaGVhZD4KCjxib2R5IG9ubG9hZD0iamF2YXNjcmlwdDogUGFnZVJlYWR5KCk7Ij4KCiAgPGRpdiBpZD0ibG9hZGluZyIgY2xhc3M9Im1vZGFsIGZhZGUiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIGxvYWRlciI+PC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0ibW9kYWwgZmFkZSI+CiAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwteGwiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiIGlkPSJwb3B1cF9oZWFkZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICA8ZGl2IGlkPSJwb3B1cC1jdXN0b20iPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciIgaWQ9InBvcHVwX2Zvb3RlciI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJzZXJ2ZXJfaW5mb3JtYXRpb24iPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLXhsIj4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgIDxoMyBjbGFzcz0ibW9kYWwtdGl0bGUiPlNlcnZlciBJbmZvcm1hdGlvbjwvaDM+CiAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TZXJ2ZXIgSW5mb3JtYXRpb248L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZlcnNpb24iIGNsYXNzPSJmb3JtLWxhYmVsIj5UaHJlYWRmaW4gVmVyc2lvbjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0idmVyc2lvbiIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iYnJhbmNoIiBjbGFzcz0iZm9ybS1sYWJlbCI+VGhyZWFkZmluIEJyYW5jaDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYnJhbmNoIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJlcnJvcnMiIGNsYXNzPSJmb3JtLWxhYmVsIj5FcnJvcnM8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImVycm9ycyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0id2FybmluZ3MiIGNsYXNzPSJmb3JtLWxhYmVsIj5XYXJuaW5nczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0id2FybmluZ3MiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHkgZGlzYWJsZWQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIHRleHQtYmctZGFyayBtYi0zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj5TdHJlYW0gSW5mb3JtYXRpb248L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkRWUiIgY2xhc3M9ImZvcm0tbGFiZWwiPkRWUiBJUDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iRFZSIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5IGRpc2FibGVkPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJtM3UtdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+TTNVIFVSTCAoU3BlY2lmaWMgZ3JvdXBzOiBbaHR0cDovLy4uLj9ncm91cC10aXRsZT1mb28sYmFyXSk8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJtM3UtdXJsIiBhcmlhLWRlc2NyaWJlZGJ5PSJiYXNpYy1hZGRvbjMiIHJlYWRvbmx5PgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImlucHV0LWdyb3VwLXRleHQgY29weS1idG4iIGRhdGEtY2xpcGJvYXJkLXRhcmdldD0iI20zdS11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InhlcGctdXJsIiBjbGFzcz0iZm9ybS1sYWJlbCI+WE1MVFYgVVJMPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZy11cmwiIGFyaWEtZGVzY3JpYmVkYnk9ImJhc2ljLWFkZG9uMyIgcmVhZG9ubHk+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaW5wdXQtZ3JvdXAtdGV4dCBjb3B5LWJ0biIgZGF0YS1jbGlwYm9hcmQtdGFyZ2V0PSIjeGVwZy11cmwiIGRhdGEtYnMtdGl0bGU9IkNvcHkgdG8gY2xpcGJvYXJkIiBkYXRhLWJzLXRvZ2dsZT0idG9vbHRpcCIgZGF0YS1icy1wbGFjZW1lbnQ9ImJvdHRvbSI+PGkgY2xhc3M9ImZhciBmYS1jbGlwYm9hcmQiPjwvaT48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0cmVhbXMiIGNsYXNzPSJmb3JtLWxhYmVsIj5GaWx0ZXJlZCBDaGFubmVsczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ic3RyZWFtcyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ieGVwZyIgY2xhc3M9ImZvcm0tbGFiZWwiPk1hcHBlZCBDaGFubmVsczwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0ieGVwZyIgYXJpYS1kZXNjcmliZWRieT0iYmFzaWMtYWRkb24zIiByZWFkb25seSBkaXNhYmxlZD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnIHN0aWNreS10b3AgbmF2YmFyLWRhcmsgYmctYmxhY2siPgogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iL3dlYiI+CiAgICAgICAgPHNwYW4gaWQ9ImxvZ28iPjwvc3Bhbj4KICAgICAgPC9hPgogICAgICA8YnV0dG9uIGNsYXNzPSJuYXZiYXItdG9nZ2xlciIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtbGFiZWw9IlRvZ2dsZSBuYXZpZ2F0aW9uIj4KICAgICAgICA8c3BhbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXItaWNvbiI+PC9zcGFuPgogICAgICA8L2J1dHRvbj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlIiBpZD0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCI+CiAgICAgICAgPHVsIGNsYXNzPSJuYXZiYXItbmF2IG14LWF1dG8gbWItMiBtYi1sZy0wIiBpZD0ibWFpbi1tZW51Ij4KICAgICAgICA8L3VsPgogICAgICAgIDx1bCBjbGFzcz0ibmF2YmFyLW5hdiBteC1hdXRvIG1iLTIgbWItbGctMCI+CiAgICAgICAgICA8bGkgY2xhc3M9Im5hdi1saW5rIiBkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiIGRhdGEtYnMtdGFyZ2V0PSIjc2VydmVyX2luZm9ybWF0aW9uIj48aSBjbGFzcz0iZmFzIGZhLWluZm8tY2lyY2xlIj48L2k+IFNlcnZlciBJbmZvcm1hdGlvbjwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L25hdj4KICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmxleCI+CiAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIgY29sLXNtLTEyIj4KICAgICAgICA8ZGl2IGlkPSJjb250ZW50IiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyb3ciIGlkPSJteVN0cmVhbXNCb3giPgogICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtc20tMTIgdGFibGUtcmVzcG9uc2l2ZSBmbG9hdC1zdGFydCI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1kYXJrIHRhYmxlLWJvcmRlcmVkIGNhcHRpb24tdG9wIiBpZD0iYWN0aXZlU3RyZWFtcyI+PC90YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC01IGNvbC1zbS0xMiB0YWJsZS1yZXNwb25zaXZlIGZsb2F0LWVuZCI+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1kYXJrIHRhYmxlLWJvcmRlcmVkIGNhcHRpb24tdG9wIiBpZD0iaW5hY3RpdmVTdHJlYW1zIj48L3RhYmxlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9ib290c3RyYXBANS4yLjAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtQTNySkQ4NTZLb3dTYjdkd2xaZFlFa08zOUdhZ2k3dklzRjBqclJBb1FtREtLdFFCSFV1TFo5QXNTdjRqRDRYYSIgY3Jvc3NvcmlnaW49ImFub255bW91cyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2NsaXBib2FyZC5qcy8yLjAuMTAvY2xpcGJvYXJkLm1pbi5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImpzL25ldHdvcmtfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9tZW51X3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvc2V0dGluZ3NfdHMuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJqcy9sb2dzX3RzLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ianMvYmFzZV90cy5qcyI+PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4="
webUI["html/js/authentication_ts.js"] = "ZnVuY3Rpb24gbG9naW4oKSB7CiAgICB2YXIgZXJyID0gZmFsc2U7CiAgICB2YXIgZGF0YSA9IG5ldyBPYmplY3QoKTsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOwogICAgdmFyIGZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXV0aGVudGljYXRpb24iKTsKICAgIHZhciBpbnB1dHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIklOUFVUIik7CiAgICBjb25zb2xlLmxvZyhpbnB1dHMpOwogICAgZm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHZhciBrZXkgPSBpbnB1dHNbaV0ubmFtZTsKICAgICAgICB2YXIgdmFsdWUgPSBpbnB1dHNbaV0udmFsdWU7CiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIGlucHV0c1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9ICJyZWQiOwogICAgICAgICAgICBlcnIgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIGlmIChlcnIgPT0gdHJ1ZSkgewogICAgICAgIGRhdGEgPSBuZXcgT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoImNvbmZpcm0iKSkgewogICAgICAgIGlmIChkYXRhWyJjb25maXJtIl0gIT0gZGF0YVsicGFzc3dvcmQiXSkgewogICAgICAgICAgICBhbGVydCgic2RhZnNkIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXNzd29yZCcpLnN0eWxlLmJvcmRlckNvbG9yID0gInJlZCI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maXJtJykuc3R5bGUuYm9yZGVyQ29sb3IgPSAicmVkIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVyciIpLmlubmVySFRNTCA9ICJ7ey5hY2NvdW50LmZhaWxlZH19IjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgZm9ybS5zdWJtaXQoKTsKfQovLyMgc291cmNlTWFwcGluZ1VSTD1hdXRoZW50aWNhdGlvbl90cy5qcy5tYXA="
- webUI["html/img/BC-QR.png"] = "iVBORw0KGgoAAAANSUhEUgAAALoAAADCCAYAAAD+f9hdAAABWGlDQ1BJQ0MgUHJvZmlsZQAAGJVlkL9LQlEUx79KEZlJUUtQcKEhg4qwITAa1EKSBjEDLRqez+eP0NflvSvm3NIf0d5aYwS1NAQtQRAtQS3N0eD6+j5N1Dxw7vmcL9977+EAXmhSVrwTQNVUVioeFZnsgRj5wjD8CCAMj6bbMpJM7oLRqf3RfIXHrS/L7lszi4FGYvvjyHccm1v4bDqD/r4YzRu2zvrNVLq0FODJk+frSrp8Tp62OBT5wuVim69czrX5oeVJp2LkN3Iw18PFHq5Wavrfv+7EfsPc32PNMGdhI4U4ohBIw4IGk0oBBlmgjjIUSqQtkg2JCh0N9kms8Yyzq6JGz0Ao47Slxk5kwyoXS0pEuCVD7Jj6ypIIrYZCHIA7/7/Lrnb2DmzeOY5z29US98D1OuC76WrBDWByDHh8kpqltaQhprdQAH4ugfEsMPXMO4ed2X4BE0hdOlrLnMgAAADQZVhJZk1NACoAAAAIAAUBEgADAAAAAQABAAABGgAFAAAAAQAAAEoBGwAFAAAAAQAAAFIBMQACAAAAGAAAAFqHaQAEAAAAAQAAAHIAAAAAAAAASAAAAAEAAABIAAAAAUFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyAAAFkAMAAgAAABQAAAC0kBEAAgAAAAcAAADIkpEAAgAAAAQ2MzIAoAIABAAAAAEAAAC6oAMABAAAAAEAAADCAAAAADIwMjI6MDU6MTIgMTQ6NTY6NDEALTA1OjAwAABhL1DGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD82lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPGV4aWY6T2Zmc2V0VGltZU9yaWdpbmFsPi0wNTowMDwvZXhpZjpPZmZzZXRUaW1lT3JpZ2luYWw+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj43ODY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+ODE4PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6U3Vic2VjVGltZU9yaWdpbmFsPjYzMjwvZXhpZjpTdWJzZWNUaW1lT3JpZ2luYWw+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD4yMDIyLTA1LTEyVDE0OjU2OjQxLjYzMjwvcGhvdG9zaG9wOkRhdGVDcmVhdGVkPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFuZHJvaWQgU1AyQS4yMjA1MDUuMDAyPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrFqaA/AABAAElEQVR4Ae3dB7wtSVE/8ENOoqCAAcN7KgJGUAREwCUJCvonSjIsSSSIIElEFEVQREmCIgisqIuEBUEQFVlXVMCAOayRRQUlKaIgEvb9+9vv/s7Wmztzzpx7z9146/M5p3u6q6uqq6urw/TMXOxYg8UhHGrgQq6Bi1/I63dYvUMNdA0cGvqhIVwkNHBo6BeJ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"
- webUI["html/img/log.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0xMC0xNFQxMToxMDo0MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CkP32mEAAANASURBVGgF7ZlPiE1RHMffw1AYhiL5k1HEijJiYaFZiHoyFspW2RFRkkSZGgtFWJIwi9FYmo0VOywkKTbKgjSlWcifRCPX51dv6s2d33md77vvXjfmV9859/7u93x/v98959x73p1KRbAkSargAhgDH0E/qIYkuHYEvAPGvwbmNOEerXM/0Q6BRSFuZj/ix0DaDnvCkGppIucDAe4OhzvkcUO+GaELAf8ux7/b8Zlrr+Pvc3zm6nX8NccXdKmFLHaUPJ/Ruhyu5zNap8Nd6PiCLrUQTyi0Rjy/5/M0Zd+smB7M32XwtgBr07aC6yfSTs7XO77OALfH4VbgHsD/HLytVquJx4nyIdQFBsHftscksK5Z0sGhpuN8Or4Aa5sJFHjtO7G2MjKvvZjN1sglOpSlCMt9LrDZ4S4Hd0Qg24vrK+gAZbPtjMqTdFKhEdkIsYxFWP720JlioUK6pzDL41jtpRIqxOOWxecuB3fhRGT8E85YBK8VygI6GSRTCxlH3TaJgyw4O2678aCxO94LbNPovYDdmOrUukIBN/MqwjJEOwGPOHR31W4VONVCLEBR9lAJpBbSrYhn5K5R+quFnGUOr1ICtMIlxjz6XVb6qot9JeKvCPSAdlQJJHDtd8hOIN0wtRDLxx6Ntr0ulalTq1TJNyYzXUjj3SjD8X87Iva7uR8s5+2bi6FtX1oOgi8g2tSn1g2yPx+t3gIR/c90s1+C1vuO/YkxdWrdjxFtE2dE0VELWaqIZ+QuUfqrhZxmyKUvgEoyE1xizOR4YOI8plXXyAZEbYsyTJvXFsUW+x6wGUSbWogJ237rZHSEgojq1CooLT3MdCH6Pcu3xz8zIq0s9lvc2+sgz6dWH/rnQPB/jlybZGoh99hCHJqk0P6TD0jaI/4b7dVYeXVq2bemokyKpRZiHwWKMimWWshxhryjoEpOKXHUNbIN8WcUc5s2r8Vue7l9oAaiTS3EhDeB6EUYnUlGojq1MobLr3uokB/5hcys7OYWKuRl5nD5Cbi5uYXw0ntPHoay2S8Seuol5RZSJ0r/n/DEc/BdrN9kTZrH7BkwDspgwyQxW6uggU3nHnAXvAG/QZE2SrARsL8hJffwDxM0mNDPvT8IAAAAAElFTkSuQmCC"
- webUI["html/js/settings_ts.js"] = "Y2xhc3MgU2V0dGluZ3NDYXRlZ29yeSB7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLkRvY3VtZW50SUQgPSAiY29udGVudF9zZXR0aW5ncyI7CiAgICB9CiAgICBjcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHZhbHVlKSB7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJINCIpOwogICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVIUigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhSIik7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICB9CiAgICBjcmVhdGVTZXR0aW5ncyhzZXR0aW5nc0tleSkgewogICAgICAgIHZhciBzZXR0aW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgY29udGVudCA9IG5ldyBQb3B1cENvbnRlbnQoKTsKICAgICAgICB2YXIgZGF0YSA9IFNFUlZFUlsic2V0dGluZ3MiXVtzZXR0aW5nc0tleV07CiAgICAgICAgc3dpdGNoIChzZXR0aW5nc0tleSkgewogICAgICAgICAgICAvLyBUZXh0ZWluZ2FiZW4KICAgICAgICAgICAgY2FzZSAidXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVwZGF0ZSIsIGRhdGEudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVwZGF0ZS5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYmFja3VwLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImJhY2t1cC5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmJhY2t1cFBhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRlbXAucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudGVtcFBhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInRlbXAucGF0aCIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy50bXBQYXRoLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy51c2VyQWdlbnQudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVzZXIuYWdlbnQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudXNlckFnZW50LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiYnVmZmVyLnRpbWVvdXQiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmZtcGVnLnBhdGgiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImZmbXBlZy5wYXRoIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLmZmbXBlZ1BhdGgucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJmZm1wZWcub3B0aW9ucyIsIGRhdGEpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5mZm1wZWdPcHRpb25zLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ2bGMucGF0aCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudmxjUGF0aC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAidmxjLnBhdGgiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MudmxjUGF0aC5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLm9wdGlvbnMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLnZsY09wdGlvbnMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInZsYy5vcHRpb25zIiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnZsY09wdGlvbnMucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpc3RlbmluZ0lwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5saXN0ZW5pbmdJcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAibGlzdGVuaW5nSXAiLCBkYXRhKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MubGlzdGVuaW5nSXAucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIENoZWNrYm94ZW4KICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ud2ViIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbldFQi50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ucG1zIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblBNUy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbk0zVS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ueG1sIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvblhNTC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24uYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZmlsZXMudXBkYXRlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5maWxlc1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2FjaGUuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5jYWNoZUltYWdlcy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAieGVwZy5yZXBsYWNlLm1pc3NpbmcuaW1hZ2VzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlRW1wdHlJbWFnZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5jaGFubmVsLnRpdGxlIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5yZXBsYWNlQ2hhbm5lbFRpdGxlLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5zdG9yZUJ1ZmZlckluUkFNLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUh0dHBzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5mb3JjZUh0dHBzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwc1BvcnQiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmh0dHBzUG9ydC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlSW5wdXQoInRleHQiLCAiaHR0cHNQb3J0IiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuaHR0cHNQb3J0LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwc1RocmVhZGZpbkRvbWFpbiI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaHR0cHNUaHJlYWRmaW5Eb21haW4udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImh0dHBzVGhyZWFkZmluRG9tYWluIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuaHR0cHNUaHJlYWRmaW5Eb21haW4ucGxhY2Vob2xkZXJ9fSIpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImh0dHBUaHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmh0dHBUaHJlYWRmaW5Eb21haW4udGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImh0dHBUaHJlYWRmaW5Eb21haW4iLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5odHRwVGhyZWFkZmluRG9tYWluLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuZW5hYmxlTm9uQXNjaWkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ0NhdGVnb3JpZXMudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgImVwZ0NhdGVnb3JpZXMiLCBkYXRhLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdDYXRlZ29yaWVzQ29sb3JzIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVJbnB1dCgidGV4dCIsICJlcGdDYXRlZ29yaWVzQ29sb3JzIiwgZGF0YS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCAie3suc2V0dGluZ3MuZXBnQ2F0ZWdvcmllc0NvbG9ycy5wbGFjZWhvbGRlcn19Iik7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic3NkcCI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3NkcC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHVtbXkiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15LnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gY29udGVudC5jcmVhdGVDaGVja2JveChzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZGF0YTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkdW1teUNoYW5uZWwiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmR1bW15Q2hhbm5lbC50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQUFYiLCAiMzAgTWludXRlcyIsICI2MCBNaW51dGVzIiwgIjkwIE1pbnV0ZXMiLCAiMTIwIE1pbnV0ZXMiLCAiMTgwIE1pbnV0ZXMiLCAiMjQwIE1pbnV0ZXMiLCAiMzYwIE1pbnV0ZXMiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIlBQViIsICIzMF9NaW51dGVzIiwgIjYwX01pbnV0ZXMiLCAiOTBfTWludXRlcyIsICIxMjBfTWludXRlcyIsICIxODBfTWludXRlcyIsICIyNDBfTWludXRlcyIsICIzNjBfTWludXRlcyJdOwogICAgICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGNvbnRlbnQuY3JlYXRlU2VsZWN0KHRleHQsIHZhbHVlcywgZGF0YSwgc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgc2VsZWN0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaWdub3JlRmlsdGVycyI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MuaWdub3JlRmlsdGVycy50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IGNvbnRlbnQuY3JlYXRlQ2hlY2tib3goc2V0dGluZ3NLZXkpOwogICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGRhdGE7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKGlucHV0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRMZWZ0KTsKICAgICAgICAgICAgICAgIHNldHRpbmcuYXBwZW5kQ2hpbGQodGRSaWdodCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5hcGkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUNoZWNrYm94KHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIFNlbGVjdAogICAgICAgICAgICBjYXNlICJ0dW5lciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudHVuZXIudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0LnB1c2goaSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goaSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdmFyIHRkTGVmdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB0ZExlZnQuaW5uZXJIVE1MID0gInt7LnNldHRpbmdzLmVwZ1NvdXJjZS50aXRsZX19IiArICI6IjsKICAgICAgICAgICAgICAgIHZhciB0ZFJpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gWyJQTVMiLCAiWEVQRyJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiUE1TIiwgIlhFUEciXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5rZWVwIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5iYWNrdXBLZWVwLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUiLCAiMTAiLCAiMjAiLCAiMzAiLCAiNDAiLCAiNTAiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci5zaXplLmtiIjoKICAgICAgICAgICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdGRMZWZ0LmlubmVySFRNTCA9ICJ7ey5zZXR0aW5ncy5idWZmZXJTaXplLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbIjAuNSBNQiIsICIxIE1CIiwgIjIgTUIiLCAiMyBNQiIsICI0IE1CIiwgIjUgTUIiLCAiNiBNQiIsICI3IE1CIiwgIjggTUIiXTsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBbIjUxMiIsICIxMDI0IiwgIjIwNDgiLCAiMzA3MiIsICI0MDk2IiwgIjUxMjAiLCAiNjE0NCIsICI3MTY4IiwgIjgxOTIiXTsKICAgICAgICAgICAgICAgIHZhciBzZWxlY3QgPSBjb250ZW50LmNyZWF0ZVNlbGVjdCh0ZXh0LCB2YWx1ZXMsIGRhdGEsIHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRBdHRyaWJ1dGUoIm9uY2hhbmdlIiwgImphdmFzY3JpcHQ6IHRoaXMuY2xhc3NOYW1lID0gJ2NoYW5nZWQnIik7CiAgICAgICAgICAgICAgICB0ZFJpZ2h0LmFwcGVuZENoaWxkKHNlbGVjdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkTGVmdCk7CiAgICAgICAgICAgICAgICBzZXR0aW5nLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlciI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLnRpdGxlfX0iICsgIjoiOwogICAgICAgICAgICAgICAgdmFyIHRkUmlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgICAgICAgICAgdmFyIHRleHQgPSBbInt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX2ZhbHNlfX0iLCAiRkZtcGVnOiAoe3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmluZm9fZmZtcGVnfX0pIiwgIlZMQzogKHt7LnNldHRpbmdzLnN0cmVhbUJ1ZmZlcmluZy5pbmZvX3ZsY319KSJdOwogICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFsiLSIsICJmZm1wZWciLCAidmxjIl07CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ID0gY29udGVudC5jcmVhdGVTZWxlY3QodGV4dCwgdmFsdWVzLCBkYXRhLCBzZXR0aW5nc0tleSk7CiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsICJqYXZhc2NyaXB0OiB0aGlzLmNsYXNzTmFtZSA9ICdjaGFuZ2VkJyIpOwogICAgICAgICAgICAgICAgdGRSaWdodC5hcHBlbmRDaGlsZChzZWxlY3QpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1ZHB4eSI6CiAgICAgICAgICAgICAgICB2YXIgdGRMZWZ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEQiKTsKICAgICAgICAgICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAie3suc2V0dGluZ3MudWRweHkudGl0bGV9fSIgKyAiOiI7CiAgICAgICAgICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSBjb250ZW50LmNyZWF0ZUlucHV0KCJ0ZXh0IiwgInVkcHh5IiwgZGF0YSk7CiAgICAgICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgInt7LnNldHRpbmdzLnVkcHh5LnBsYWNlaG9sZGVyfX0iKTsKICAgICAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCAiamF2YXNjcmlwdDogdGhpcy5jbGFzc05hbWUgPSAnY2hhbmdlZCciKTsKICAgICAgICAgICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgICAgICAgICAgc2V0dGluZy5hcHBlbmRDaGlsZCh0ZFJpZ2h0KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0dGluZzsKICAgIH0KICAgIGNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KSB7CiAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKICAgICAgICB2YXIgdGV4dDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLndlYiI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uV0VCLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLm0zdSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uTTNVLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnBtcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uUE1TLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmF1dGhlbnRpY2F0aW9uWE1MLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLmFwaSI6CiAgICAgICAgICAgICAgICBpZiAoU0VSVkVSWyJzZXR0aW5ncyJdWyJhdXRoZW50aWNhdGlvbi53ZWIiXSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5hdXRoZW50aWNhdGlvbkFQSS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUaHJlYWRmaW5BdXRvVXBkYXRlIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuVGhyZWFkZmluQXV0b1VwZGF0ZS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJsaXN0ZW5pbmdJcCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmxpc3RlbmluZ0lwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJhY2t1cC5rZWVwIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYmFja3VwS2VlcC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJiYWNrdXAucGF0aCI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmJhY2t1cFBhdGguZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGVtcC5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudGVtcFBhdGguZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYnVmZmVyIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3Muc3RyZWFtQnVmZmVyaW5nLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci5zaXplLmtiIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYnVmZmVyU2l6ZS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzdG9yZUJ1ZmZlckluUkFNIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3Muc3RvcmVCdWZmZXJJblJBTS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmb3JjZUh0dHBzIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZm9yY2VIdHRwcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwc1BvcnQiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5odHRwc1BvcnQuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHR0cHNUaHJlYWRmaW5Eb21haW4iOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5odHRwc1RocmVhZGZpbkRvbWFpbi5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodHRwVGhyZWFkZmluRG9tYWluIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuaHR0cFRocmVhZGZpbkRvbWFpbi5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlbmFibGVOb25Bc2NpaSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmVuYWJsZU5vbkFzY2lpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVwZ0NhdGVnb3JpZXNDb2xvcnMiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdDYXRlZ29yaWVzQ29sb3JzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImJ1ZmZlci50aW1lb3V0IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYnVmZmVyVGltZW91dC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1c2VyLmFnZW50IjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudXNlckFnZW50LmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZmbXBlZy5wYXRoIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuZmZtcGVnUGF0aC5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmZm1wZWcub3B0aW9ucyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZmbXBlZ09wdGlvbnMuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidmxjLnBhdGgiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy52bGNQYXRoLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInZsYy5vcHRpb25zIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MudmxjT3B0aW9ucy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlcGdTb3VyY2UiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5lcGdTb3VyY2UuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidHVuZXIiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy50dW5lci5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51cGRhdGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiYXBpIjoKICAgICAgICAgICAgICAgIHRleHQgPSAie3suc2V0dGluZ3MuYXBpLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInNzZHAiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy5zc2RwLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVzLnVwZGF0ZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmZpbGVzVXBkYXRlLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImNhY2hlLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLmNhY2hlSW1hZ2VzLmRlc2NyaXB0aW9ufX0iOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInhlcGcucmVwbGFjZS5taXNzaW5nLmltYWdlcyI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VFbXB0eUltYWdlcy5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ4ZXBnLnJlcGxhY2UuY2hhbm5lbC50aXRsZSI6CiAgICAgICAgICAgICAgICB0ZXh0ID0gInt7LnNldHRpbmdzLnJlcGxhY2VDaGFubmVsVGl0bGUuZGVzY3JpcHRpb259fSI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidWRweHkiOgogICAgICAgICAgICAgICAgdGV4dCA9ICJ7ey5zZXR0aW5ncy51ZHB4eS5kZXNjcmlwdGlvbn19IjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGV4dCA9ICIiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciB0ZExlZnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwogICAgICAgIHRkTGVmdC5pbm5lckhUTUwgPSAiIjsKICAgICAgICB2YXIgdGRSaWdodCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7CiAgICAgICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpOwogICAgICAgIHByZS5pbm5lckhUTUwgPSB0ZXh0OwogICAgICAgIHRkUmlnaHQuYXBwZW5kQ2hpbGQocHJlKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRDaGlsZCh0ZExlZnQpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHRkUmlnaHQpOwogICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKICAgIH0KfQpjbGFzcyBTZXR0aW5nc0NhdGVnb3J5SXRlbSBleHRlbmRzIFNldHRpbmdzQ2F0ZWdvcnkgewogICAgY29uc3RydWN0b3IoaGVhZGxpbmUsIHNldHRpbmdzS2V5cykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy5oZWFkbGluZSA9IGhlYWRsaW5lOwogICAgICAgIHRoaXMuc2V0dGluZ3NLZXlzID0gc2V0dGluZ3NLZXlzOwogICAgfQogICAgY3JlYXRlQ2F0ZWdvcnkoKSB7CiAgICAgICAgdmFyIGhlYWRsaW5lID0gdGhpcy5jcmVhdGVDYXRlZ29yeUhlYWRsaW5lKHRoaXMuaGVhZGxpbmUpOwogICAgICAgIHZhciBzZXR0aW5nc0tleXMgPSB0aGlzLnNldHRpbmdzS2V5czsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5Eb2N1bWVudElEKTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQoaGVhZGxpbmUpOwogICAgICAgIC8vIFRhYmVsbGUgZsO8ciBkaWUgS2F0ZWdvcmllIGVyc3RlbGxlbgogICAgICAgIHZhciB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7CiAgICAgICAgdmFyIGtleXMgPSBzZXR0aW5nc0tleXMuc3BsaXQoIiwiKTsKICAgICAgICBrZXlzLmZvckVhY2goc2V0dGluZ3NLZXkgPT4gewogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzS2V5KSB7CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5wbXMiOgogICAgICAgICAgICAgICAgY2FzZSAiYXV0aGVudGljYXRpb24ubTN1IjoKICAgICAgICAgICAgICAgIGNhc2UgImF1dGhlbnRpY2F0aW9uLnhtbCI6CiAgICAgICAgICAgICAgICBjYXNlICJhdXRoZW50aWNhdGlvbi5hcGkiOgogICAgICAgICAgICAgICAgICAgIGlmIChTRVJWRVJbInNldHRpbmdzIl1bImF1dGhlbnRpY2F0aW9uLndlYiJdID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVNldHRpbmdzKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSB0aGlzLmNyZWF0ZURlc2NyaXB0aW9uKHNldHRpbmdzS2V5KTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZChkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBkb2MuYXBwZW5kQ2hpbGQodGFibGUpOwogICAgICAgIGRvYy5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUhSKCkpOwogICAgfQp9CmZ1bmN0aW9uIHNob3dTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTRVRUSU5HUyIpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nc0NhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgc2V0dGluZ3NDYXRlZ29yeVtpXS5jcmVhdGVDYXRlZ29yeSgpOwogICAgfQp9CmZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKICAgIGNvbnNvbGUubG9nKCJTYXZlIFNldHRpbmdzIik7CiAgICB2YXIgY21kID0gInNhdmVTZXR0aW5ncyI7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnRfc2V0dGluZ3MiKTsKICAgIHZhciBzZXR0aW5ncyA9IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJjaGFuZ2VkIik7CiAgICB2YXIgbmV3U2V0dGluZ3MgPSBuZXcgT2JqZWN0KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNldHRpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG5hbWU7CiAgICAgICAgdmFyIHZhbHVlOwogICAgICAgIHN3aXRjaCAoc2V0dGluZ3NbaV0udGFnTmFtZSkgewogICAgICAgICAgICBjYXNlICJJTlBVVCI6CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzW2ldLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZXR0aW5nc1tpXS5uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc2V0dGluZ3NbaV0ubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZXR0aW5nc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJ1cGRhdGUiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoIiwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmZpbHRlcihmdW5jdGlvbiAoZSkgeyByZXR1cm4gZTsgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJidWZmZXIudGltZW91dCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJTRUxFQ1QiOgogICAgICAgICAgICAgICAgbmFtZSA9IHNldHRpbmdzW2ldLm5hbWU7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNldHRpbmdzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgLy8gV2VubiBkZXIgV2VydCBlaW5lIFphaGwgaXN0LCB3aXJkIGRpZXNlciBhbHMgWmFobCBnZXNwZWljaGVydAogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgIG5ld1NldHRpbmdzW25hbWVdID0gdmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXdTZXR0aW5nc1tuYW1lXSA9IHBhcnNlSW50KHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHZhciBkYXRhID0gbmV3IE9iamVjdCgpOwogICAgZGF0YVsic2V0dGluZ3MiXSA9IG5ld1NldHRpbmdzOwogICAgdmFyIHNlcnZlciA9IG5ldyBTZXJ2ZXIoY21kKTsKICAgIHNlcnZlci5yZXF1ZXN0KGRhdGEpOwp9Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldHRpbmdzX3RzLmpzLm1hcA=="
- webUI["html/lang/en.json"] = "ew0KICAibWFpbk1lbnUiOiB7DQogICAgIml0ZW0iOiB7DQogICAgICAicGxheWxpc3QiOiAiUGxheWxpc3QiLA0KICAgICAgInBtc0lEIjogIlBNUyBJRCIsDQogICAgICAiZmlsdGVyIjogIkZpbHRlciIsDQogICAgICAieG1sdHYiOiAiWE1MVFYiLA0KICAgICAgIm1hcHBpbmciOiAiTWFwcGluZyIsDQogICAgICAidXNlcnMiOiAiVXNlcnMiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0sDQogICAgImhlYWRsaW5lIjogew0KICAgICAgInBsYXlsaXN0IjogIkxvY2FsIG9yIHJlbW90ZSBwbGF5bGlzdHMiLA0KICAgICAgImZpbHRlciI6ICJGaWx0ZXIgcGxheWxpc3QiLA0KICAgICAgInhtbHR2IjogIkxvY2FsIG9yIHJlbW90ZSBYTUxUViBmaWxlcyIsDQogICAgICAibWFwcGluZyI6ICJNYXAgcGxheWxpc3QgY2hhbm5lbHMgdG8gRVBHIGNoYW5uZWxzIiwNCiAgICAgICJ1c2VycyI6ICJVc2VyIG1hbmFnZW1lbnQiLA0KICAgICAgInNldHRpbmdzIjogIlNldHRpbmdzIiwNCiAgICAgICJsb2ciOiAiTG9nIiwNCiAgICAgICJsb2dvdXQiOiAiTG9nb3V0Ig0KICAgIH0NCiAgfSwNCiAgImNvbmZpcm0iOiB7DQogICAgInJlc3RvcmUiOiAiQWxsIGRhdGEgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRob3NlIGZyb20gdGhlIGJhY2t1cC4gU2hvdWxkIHRoZSBmaWxlcyBiZSByZXN0b3JlZD8iDQogIH0sDQogICJhbGVydCI6IHsNCiAgICAiZmlsZUxvYWRpbmdFcnJvciI6ICJGaWxlIGNvdWxkbid0IGJlIGxvYWRlZCIsDQogICAgImludmFsaWRDaGFubmVsTnVtYmVyIjogIkludmFsaWQgY2hhbm5lbCBudW1iZXIiLA0KICAgICJtaXNzaW5nSW5wdXQiOiAiTWlzc2luZyBpbnB1dCINCiAgfSwNCiAgImJ1dHRvbiI6IHsNCiAgICAiYmFjayI6ICJCYWNrIiwNCiAgICAiYmFja3VwIjogIkJhY2t1cCIsDQogICAgImJ1bGtFZGl0IjogIkJ1bGsgRWRpdCIsDQogICAgImNhbmNlbCI6ICJDYW5jZWwiLA0KICAgICJkZWxldGUiOiAiRGVsZXRlIiwNCiAgICAiZG9uZSI6ICJEb25lIiwNCiAgICAibG9naW4iOiAiTG9naW4iLA0KICAgICJuZXciOiAiTmV3IiwNCiAgICAibmV4dCI6ICJOZXh0IiwNCiAgICAicmVzdG9yZSI6ICJSZXN0b3JlIiwNCiAgICAic2F2ZSI6ICJTYXZlIiwNCiAgICAic2VhcmNoIjogIlNlYXJjaCIsDQogICAgInVwZGF0ZSI6ICJVcGRhdGUiLA0KICAgICJjcmFldGVBY2NvdW50IjogIkNyZWF0ZSBBY2NvdW50IiwNCiAgICAicmVzZXRMb2dzIjogIlJlc2V0IExvZ3MiLA0KICAgICJ1cGxvYWRMb2dvIjogIlVwbG9hZCBMb2dvIiwNCiAgICAic29ydENoYW5uZWxzQWxwaGEiOiAiU29ydCBDaGFubmVscyBBbHBoYWJldGljYWxseSIsDQogICAgInNvcnRDaGFubmVsTnVtYmVycyI6ICJTb3J0IENoYW5uZWxzIg0KICB9LA0KICAiZmlsdGVyIjogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJuYW1lIjogIkZpbHRlciBOYW1lIiwNCiAgICAgICJ0eXBlIjogIkZpbHRlciBUeXBlIiwNCiAgICAgICJmaWx0ZXIiOiAiRmlsdGVyIg0KICAgIH0sDQogICAgImN1c3RvbSI6ICJDdXN0b20iLA0KICAgICJncm91cCI6ICJHcm91cCIsDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBuYW1lIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAic3RhcnRpbmdudW1iZXIiOiB7DQogICAgICAidGl0bGUiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRmlsdGVyIFN0YXJ0aW5nIE51bWJlciIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU3RhcnRpbmcgQ2hhbm5lbCBOdW1iZXIgdG8gdXNlIGZvciB0aGlzIEdyb3VwIEZpbHRlciAoRGVmYXVsdCBpcyAxMDAwKSINCiAgICB9LA0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgQ2F0ZWdvcnkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbHRlciBDYXRlZ29yeSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVyIENhdGVnb3J5IHNldHMgYWxsIGNoYW5uZWxzIGluIHRoZSBmaWx0ZXIgdG8gYSBzcGVjaWZpYyBjYXRlZ29yeSAobmV3cywgc3BvcnRzLCBldGMpIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInR5cGUiOiB7DQogICAgICAidGl0bGUiOiAiVHlwZSIsDQogICAgICAiZ3JvdXBUaXRsZSI6ICJHcm91cCBUaXRsZSIsDQogICAgICAiY3VzdG9tRmlsdGVyIjogIkN1c3RvbSBGaWx0ZXIiDQogICAgfSwNCiAgICAiY2FzZVNlbnNpdGl2ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDYXNlIFNlbnNpdGl2ZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZmlsdGVyUnVsZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJGaWx0ZXIgUnVsZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiU3BvcnQge0hEfSAhe0VTLElUfSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbHRlckdyb3VwIjogew0KICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlNlbGVjdCBhIE0zVSBncm91cC4gKENvdW50ZXIpPGJyPkNoYW5naW5nIHRoZSBncm91cCB0aXRsZSBpbiB0aGUgTTNVIGludmFsaWRhdGVzIHRoZSBmaWx0ZXIuIg0KICAgIH0sDQogICAgImluY2x1ZGUiOiB7DQogICAgICAidGl0bGUiOiAiSW5jbHVkZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRkhELFVIRCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3QgaW5jbHVkZS48YnI+KENvbW1hIHNlcGFyYXRlZCkgQ29tbWEgbWVhbnMgb3IiDQogICAgfSwNCiAgICAiZXhjbHVkZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJFeGNsdWRlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJFUyxJVCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ2hhbm5lbCBuYW1lIG11c3Qgbm90IGNvbnRhaW4uPGJyPihDb21tYSBzZXBhcmF0ZWQpIENvbW1hIG1lYW5zIG9yIg0KICAgIH0NCiAgfSwNCiAgInBsYXlsaXN0Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJwbGF5bGlzdCI6ICJQbGF5bGlzdCIsDQogICAgICAidHVuZXIiOiAiVHVuZXIiLA0KICAgICAgImxhc3RVcGRhdGUiOiAiTGFzdCBVcGRhdGUiLA0KICAgICAgImF2YWlsYWJpbGl0eSI6ICJBdmFpbGFiaWxpdHkiLA0KICAgICAgInR5cGUiOiAiVHlwZSIsDQogICAgICAic3RyZWFtcyI6ICJTdHJlYW1zIiwNCiAgICAgICJncm91cFRpdGxlIjogImdyb3VwLXRpdGxlIiwNCiAgICAgICJ0dmdJRCI6ICJ0dmctaWQiLA0KICAgICAgInVuaXF1ZUlEIjogIlVuaXF1ZSBJRCINCiAgICB9LA0KICAgICJwbGF5bGlzdFR5cGUiOiB7DQogICAgICAidGl0bGUiOiAiUGxheWxpc3QgdHlwZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidHlwZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJUeXBlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJuYW1lIjogew0KICAgICAgInRpdGxlIjogIk5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBsYXlsaXN0IG5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiRGVzY3JpcHRpb24iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWxlTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBNM1UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJmaWxlSERIUiI6IHsNCiAgICAgICJ0aXRsZSI6ICJIREhvbWVSdW4gSVAiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIklQIGFkZHJlc3MgYW5kIHBvcnQgKDE5Mi4xNjguMS4xMDo1MDA0KSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInR1bmVyIjogew0KICAgICAgInRpdGxlIjogIlR1bmVyIC8gU3RyZWFtcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLiA8YnI+T25seSBhdmFpbGFibGUgd2l0aCBhY3RpdmF0ZWQgYnVmZmVyLjxicj5OZXcgc2V0dGluZ3Mgd2lsbCBvbmx5IGJlIGFwcGxpZWQgYWZ0ZXIgcXVpdHRpbmcgYWxsIHN0cmVhbXMuIg0KICAgIH0NCiAgfSwNCiAgInhtbHR2Ijogew0KICAgICJ0YWJsZSI6IHsNCiAgICAgICJndWlkZSI6ICJHdWlkZSIsDQogICAgICAibGFzdFVwZGF0ZSI6ICJMYXN0IFVwZGF0ZSIsDQogICAgICAiYXZhaWxhYmlsaXR5IjogIkF2YWlsYWJpbGl0eSIsDQogICAgICAiY2hhbm5lbHMiOiAiQ2hhbm5lbHMiLA0KICAgICAgInByb2dyYW1zIjogIlByb2dyYW1zIg0KICAgIH0sDQogICAgIm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiTmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiR3VpZGUgbmFtZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImRlc2NyaXB0aW9uIjogew0KICAgICAgInRpdGxlIjogIkRlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJEZXNjcmlwdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImZpbGVYTUxUViI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0NCiAgfSwNCiAgIm1hcHBpbmciOiB7DQogICAgInRhYmxlIjogew0KICAgICAgImNoTm8iOiAiQ2guIE5vLiIsDQogICAgICAibG9nbyI6ICJMb2dvIiwNCiAgICAgICJjaGFubmVsTmFtZSI6ICJDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYXlsaXN0IjogIlBsYXlsaXN0IiwNCiAgICAgICJncm91cFRpdGxlIjogIkdyb3VwIFRpdGxlIiwNCiAgICAgICJ4bWx0dkZpbGUiOiAiWE1MVFYgRmlsZSIsDQogICAgICAieG1sdHZJRCI6ICJYTUxUViBJRCINCiAgICB9LA0KICAgICJhY3RpdmUiOiB7DQogICAgICAidGl0bGUiOiAiQWN0aXZlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsTmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIE5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgImNoYW5uZWxHcm91cFN0YXJ0Ijogew0KICAgICAgInRpdGxlIjogIkNoYW5uZWwgR3JvdXAgU3RhcnQiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInNvcnRDaGFubmVsc0FscGhhIjogew0KICAgICAgInRpdGxlIjogIlNvcnQgQWxwaGFiZXRpY2FsbHkiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInNvcnRDaGFubmVscyI6IHsNCiAgICAgICJ0aXRsZSI6ICJTb3J0IENoYW5uZWxzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJkZXNjcmlwdGlvbiI6IHsNCiAgICAgICJ0aXRsZSI6ICJDaGFubmVsIERlc2NyaXB0aW9uIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJVc2VkIGJ5IHRoZSBEdW1teSBhcyBhbiBYTUwgZGVzY3JpcHRpb24iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ1cGRhdGVDaGFubmVsTmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGUgQ2hhbm5lbCBOYW1lIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjaGFubmVsTG9nbyI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2dvIFVSTCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAidXBkYXRlQ2hhbm5lbExvZ28iOiB7DQogICAgICAidGl0bGUiOiAiVXBkYXRlIENoYW5uZWwgTG9nbyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcnkiOiB7DQogICAgICAidGl0bGUiOiAiRVBHIENhdGVnb3J5IiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJtM3VHcm91cFRpdGxlIjogew0KICAgICAgInRpdGxlIjogIkdyb3VwIFRpdGxlICh0aHJlYWRmaW4ubTN1KSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAieG1sdHZGaWxlIjogew0KICAgICAgInRpdGxlIjogIlhNTFRWIEZpbGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgInhtbHR2Q2hhbm5lbCI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBDaGFubmVsIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwcHZleHRyYSI6IHsNCiAgICAgICJ0aXRsZSI6ICJQUFYgRXh0cmEgVGl0bGUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyB3aWxsIGFkZCBjdXN0b20gdGV4dCB0byB0aGUgUHJvZ3JhbW1lIGRhdGEiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDEiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDIiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYmFja3VwQ2hhbm5lbDMiOiB7DQogICAgICAidGl0bGUiOiAiQmFja3VwIENoYW5uZWwgMyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiaGlkZUNoYW5uZWwiOiB7DQogICAgICAidGl0bGUiOiAiSGlkZSBCYWNrdXAgQ2hhbm5lbCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfQ0KICB9LA0KICAidXNlcnMiOiB7DQogICAgInRhYmxlIjogew0KICAgICAgInVzZXJuYW1lIjogIlVzZXJuYW1lIiwNCiAgICAgICJwYXNzd29yZCI6ICJQYXNzd29yZCIsDQogICAgICAid2ViIjogIldFQiIsDQogICAgICAicG1zIjogIlBNUyIsDQogICAgICAibTN1IjogIk0zVSIsDQogICAgICAieG1sIjogIlhNTCIsDQogICAgICAiYXBpIjogIkFQSSINCiAgICB9LA0KICAgICJ1c2VybmFtZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVc2VybmFtZSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiVXNlcm5hbWUiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJwYXNzd29yZCI6IHsNCiAgICAgICJ0aXRsZSI6ICJQYXNzd29yZCIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiUGFzc3dvcmQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkNvbmZpcm0iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlBhc3N3b3JkIGNvbmZpcm0iLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ3ZWIiOiB7DQogICAgICAidGl0bGUiOiAiV2ViIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAicG1zIjogew0KICAgICAgInRpdGxlIjogIlBNUyBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0sDQogICAgIm0zdSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UgQWNjZXNzIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIiINCiAgICB9LA0KICAgICJ4bWwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEFjY2VzcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICIiDQogICAgfSwNCiAgICAiYXBpIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBY2Nlc3MiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiIg0KICAgIH0NCiAgfSwNCiAgInNldHRpbmdzIjogew0KICAgICJjYXRlZ29yeSI6IHsNCiAgICAgICJnZW5lcmFsIjogIkdlbmVyYWwiLA0KICAgICAgImZpbGVzIjogIkZpbGVzIiwNCiAgICAgICJuZXR3b3JrIjogIk5ldHdvcmsiLA0KICAgICAgInN0cmVhbWluZyI6ICJTdHJlYW1pbmciLA0KICAgICAgImJhY2t1cCI6ICJCYWNrdXAiLA0KICAgICAgImF1dGhlbnRpY2F0aW9uIjogIkF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgInVwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJTY2hlZHVsZSBmb3IgdXBkYXRpbmcgKFBsYXlsaXN0LCBYTUxUViwgQmFja3VwKSIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiMDAwMCwxMDAwLDIwMDAiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRpbWUgaW4gMjQgaG91ciBmb3JtYXQgKDA4MDAgPSA4OjAwIGFtKS4gTW9yZSB0aW1lcyBjYW4gYmUgZW50ZXJlZCBjb21tYSBzZXBhcmF0ZWQuIExlYXZlIHRoaXMgZmllbGQgZW1wdHkgaWYgbm8gdXBkYXRlcyBhcmUgdG8gYmUgY2FycmllZCBvdXQuIg0KICAgIH0sDQogICAgImFwaSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBUEkgSW50ZXJmYWNlIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWaWEgQVBJIGludGVyZmFjZSBpdCBpcyBwb3NzaWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIFRocmVhZGZpbi4gQVBJIGRvY3VtZW50YXRpb24gaXMgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL1RocmVhZGZpbi9UaHJlYWRmaW4tRG9jdW1lbnRhdGlvbi9ibG9iL21hc3Rlci9lbi9jb25maWd1cmF0aW9uLm1kI2FwaSc+aGVyZTwvYT4iDQogICAgfSwNCiAgICAic3NkcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJTU0RQIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTU0RQIGlzIGEgbmV0d29yayBwcm90b2NvbCBmb3Igc2VydmljZSBkaXNjb3ZlcnkuIEl0IGlzIHVzZWQgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIFRocmVhZGZpbiBpbiB0aGUgbmV0d29yay4iDQogICAgfSwNCiAgICAiZHVtbXkiOiB7DQogICAgICAidGl0bGUiOiAiRW5hYmxlIERlZmF1bHQgRHVtbXkgRGF0YSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiV2hlbiBlbmFibGVkLCB0aGlzIHdpbGwgYXV0b21hdGljYWxseSBtYXAgaW5hY3RpdmUgY2hhbm5lbHMgdG8gdGhlIGR1bW15IGRhdGEgY2hhbm5lbCBiZWxvdy4gVXNlIHRoaXMgdG8ga2VlcCBMaXZlIEV2ZW50IGNoYW5uZWxzIGFjdGl2ZS4iDQogICAgfSwNCiAgICAiZHVtbXlDaGFubmVsIjogew0KICAgICAgInRpdGxlIjogIkR1bW15IERhdGEgQ2hhbm5lbCIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0IHRoZSBkZWZhdWx0IGNoYW5uZWwgdG8gdXNlIHdoZW4gbWFwcGluZyBpbmFjdGl2ZSBjaGFubmVscyB0byB0aGUgZHVtbXkgZGF0YS4iDQogICAgfSwNCiAgICAiaWdub3JlRmlsdGVycyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJZ25vcmUgRmlsdGVycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgZmlsdGVyaW5nIGlzIGNvbXBsZXRlbHkgaWdub3JlZC4iDQogICAgfSwNCiAgICAiZXBnU291cmNlIjogew0KICAgICAgInRpdGxlIjogIkVQRyBTb3VyY2UiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBNUzo8YnI+LSBVc2UgRVBHIGRhdGEgZnJvbSBQbGV4LCBFbWJ5IG9yIEplbGx5ZmluIDxicj48YnI+WEVQRzo8YnI+LSBVc2Ugb2Ygb25lIG9yIG1vcmUgWE1MVFYgZmlsZXM8YnI+LSBDaGFubmVsIG1hbmFnZW1lbnQ8YnI+LSBNM1UgLyBYTUxUViBleHBvcnQgKEhUVFAgbGluayBmb3IgSVBUViBhcHBzKSINCiAgICB9LA0KICAgICJ0dW5lciI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgVHVuZXJzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcGFyYWxsZWwgY29ubmVjdGlvbnMgdGhhdCBjYW4gYmUgZXN0YWJsaXNoZWQgdG8gdGhlIHByb3ZpZGVyLjxicj5BdmFpbGFibGUgZm9yOiBQbGV4LCBFbWJ5LCBKZWxseWZpbiwgTTNVICh3aXRoIGFjdGl2ZSBidWZmZXIpLjxicj5BZnRlciBhIGNoYW5nZSwgVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQbGV4IC8gRW1ieSAvIEplbGx5ZmluIERWUiBzZXR0aW5ncyBhbmQgc2V0IHVwIGFnYWluLiINCiAgICB9LA0KICAgICJmaWxlc1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJVcGRhdGVzIGFsbCBmaWxlcyBhdCBzdGFydHVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVcGRhdGVzIGFsbCBwbGF5bGlzdHMsIHR1bmVyIGFuZCBYTUxUViBmaWxlcyBhdCBzdGFydHVwLiINCiAgICB9LA0KICAgICJjYWNoZUltYWdlcyI6IHsNCiAgICAgICJ0aXRsZSI6ICJJbWFnZSBDYWNoaW5nIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJBbGwgaW1hZ2VzIGZyb20gdGhlIFhNTFRWIGZpbGUgYXJlIGNhY2hlZCwgYWxsb3dpbmcgZmFzdGVyIHJlbmRlcmluZyBvZiB0aGUgZ3JpZCBpbiB0aGUgY2xpZW50Ljxicj5Eb3dubG9hZGluZyB0aGUgaW1hZ2VzIG1heSB0YWtlIGEgd2hpbGUgYW5kIHdpbGwgYmUgZG9uZSBpbiB0aGUgYmFja2dyb3VuZC4iDQogICAgfSwNCiAgICAicmVwbGFjZUVtcHR5SW1hZ2VzIjogew0KICAgICAgInRpdGxlIjogIlJlcGxhY2UgbWlzc2luZyBwcm9ncmFtIGltYWdlcyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgdGhlIHBvc3RlciBpbiB0aGUgWE1MVFYgcHJvZ3JhbSBpcyBtaXNzaW5nLCB0aGUgY2hhbm5lbCBsb2dvIHdpbGwgYmUgdXNlZC4iDQogICAgfSwNCiAgICAicmVwbGFjZUNoYW5uZWxUaXRsZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJSZXBsYWNlIFBQViBjaGFubmVscyB0aXRsZS9kZXNjIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJVc2UgdGhpcyBpZiB5b3VyIHByb3ZpZGVyIG1hcHMgdGhlIFBQViBldmVudCBuYW1lIHRvIHRoZSBjaGFubmVsIG5hbWUiDQogICAgfSwNCiAgICAiVGhyZWFkZmluQXV0b1VwZGF0ZSI6IHsNCiAgICAgICJ0aXRsZSI6ICJBdXRvbWF0aWMgdXBkYXRlIG9mIFRocmVhZGZpbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgYSBuZXcgdmVyc2lvbiBvZiBUaHJlYWRmaW4gaXMgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLiBUaGUgdXBkYXRlcyBhcmUgZG93bmxvYWRlZCBmcm9tIEdpdEh1Yi4iDQogICAgfSwNCiAgICAic3RyZWFtQnVmZmVyaW5nIjogew0KICAgICAgInRpdGxlIjogIlN0cmVhbSBCdWZmZXIiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIkZ1bmN0aW9ucyBvZiB0aGUgYnVmZmVyOjxicj4tIFRoZSBzdHJlYW0gaXMgcGFzc2VkIGZyb20gRkZtcGVnIG9yIFZMQyB0byBQbGV4LCBFbWJ5LCBKZWxseWZpbiBvciBNM1UgUGxheWVyPGJyPi0gU21hbGwgamVya2luZyBvZiB0aGUgc3RyZWFtcyBjYW4gYmUgY29tcGVuc2F0ZWQ8YnI+LSBITFMgLyBNM1U4IHN1cHBvcnQ8YnI+LSBSVFAgLyBSVFBTIHN1cHBvcnQ8YnI+LSBSZS1zdHJlYW1pbmc8YnI+LSBTZXBhcmF0ZSB0dW5lciBsaW1pdCBmb3IgZWFjaCBwbGF5bGlzdCIsDQogICAgICAiaW5mb19mYWxzZSI6ICJObyBCdWZmZXIgKENsaWVudCBjb25uZWN0cyBkaXJlY3RseSB0byB0aGUgc3RyZWFtaW5nIHNlcnZlcikiLA0KICAgICAgImluZm9fZmZtcGVnIjogIkZGbXBlZyBjb25uZWN0cyB0byB0aGUgc3RyZWFtaW5nIHNlcnZlciIsDQogICAgICAiaW5mb192bGMiOiAiVkxDIGNvbm5lY3RzIHRvIHRoZSBzdHJlYW1pbmcgc2VydmVyIg0KICAgIH0sDQogICAgInVkcHh5Ijogew0KICAgICAgInRpdGxlIjogIlVEUHh5IGFkZHJlc3MiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBhZGRyZXNzIG9mIHlvdXIgVURQeHkgc2VydmVyLiBJZiBzZXQsIGFuZCB0aGUgY2hhbm5lbCBVUkxzIGluIHRoZSBtM3UgaXMgbXVsdGljYXN0LCBUaHJlYWRmaW4gd2lsbCByZXdyaXRlIGl0IHNvIHRoYXQgaXQgaXMgYWNjZXNzZWQgdmlhIHRoZSBVRFB4eSBzZXJ2aWNlLiIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiaG9zdDpwb3J0Ig0KICAgIH0sDQogICAgImZmbXBlZ1BhdGgiOiB7DQogICAgICAidGl0bGUiOiAiRkZtcGVnIEJpbmFyeSBQYXRoIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXRoIHRvIEZGbXBlZyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9mZm1wZWciDQogICAgfSwNCiAgICAiZmZtcGVnT3B0aW9ucyI6IHsNCiAgICAgICJ0aXRsZSI6ICJGRm1wZWcgT3B0aW9ucyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRkZtcGVnIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJ2bGNQYXRoIjogew0KICAgICAgInRpdGxlIjogIlZMQyAvIENWTEMgQmluYXJ5IFBhdGgiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlBhdGggdG8gVkxDIC8gQ1ZMQyBiaW5hcnkuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIvcGF0aC90by9jdmxjIg0KICAgIH0sDQogICAgInZsY09wdGlvbnMiOiB7DQogICAgICAidGl0bGUiOiAiVkxDIC8gQ1ZMQyBPcHRpb25zIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJWTEMgLyBDVkxDIG9wdGlvbnMuPGJyPk9ubHkgY2hhbmdlIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy48YnI+TGVhdmUgYmxhbmsgdG8gc2V0IGRlZmF1bHQgc2V0dGluZ3MuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJMZWF2ZSBibGFuayB0byBzZXQgZGVmYXVsdCBzZXR0aW5ncyINCiAgICB9LA0KICAgICJidWZmZXJTaXplIjogew0KICAgICAgInRpdGxlIjogIkJ1ZmZlciBTaXplIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJCdWZmZXIgc2l6ZSBpbiBNQi48YnI+TTNVODogSWYgdGhlIFRTIHNlZ21lbnQgc21hbGxlciB0aGVuIHRoZSBidWZmZXIgc2l6ZSwgdGhlIGZpbGUgc2l6ZSBvZiB0aGUgc2VnbWVudCBpcyB1c2VkLiINCiAgICB9LA0KICAgICJzdG9yZUJ1ZmZlckluUkFNIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiU3RvcmUgYnVmZmVyIGluIFJBTSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiSWYgY2hlY2tlZCwgd3JpdGUgYnVmZmVyIHRvIFJBTSBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gZGlzayINCiAgICB9LA0KICAgICJsaXN0ZW5pbmdJcCIgOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJMaXN0ZW5pbmcgSVBzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJFbnRlciB0aGUgbGlzdGVuaW5nIElQcyBzZXByYXRlZCBieSBhbiAnOycgZm9yIGV4YW1wbGU6IDEyNy4wLjAuMTsxOTIuMTY4LjIuMSINCiAgICB9LA0KICAgICJmb3JjZUh0dHBzIjoNCiAgICB7DQogICAgICAidGl0bGUiOiAiRm9yY2UgSFRUUFMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldpdGggaW1hZ2UgY2FjaGluZyBlbmFibGVkLCBpZiBjaGVja2VkLCB3aWxsIHJld3JpdGUgTTNVIGFuZCBFUEcgdXJscyB0byBpbmNsdWRlIGh0dHBzIHByb3RvY29sIGFzIHdlbGwgYXMgaHR0cHMgcG9ydCAoZGVmYXVsdCBpcyA0NDMpIg0KICAgIH0sDQogICAgImh0dHBzUG9ydCI6DQogICAgew0KICAgICAgInRpdGxlIjogIkhUVFBTIFBvcnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIldpdGggaW1hZ2UgY2FjaGluZyBlbmFibGVkLCBwb3J0IHRvIHVzZSBmb3IgZm9yY2luZyBodHRwcy4gRGVmYXVsdCBpcyA0NDMiDQogICAgfSwNCiAgICAiaHR0cHNUaHJlYWRmaW5Eb21haW4iOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJIVFRQUyBUaHJlYWRmaW4gRG9tYWluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgcmV3cml0ZSB0aGUgdGhyZWFkZmluIGlwIGFkZHJlc3MgaW4gdGhlIG0zdSB0byB1c2UgYSBkb21haW4gZm9yIEhUVFBTIG1vZGUuIERvIE5PVCBpbmNsdWRlIGh0dHBzIChleDogc29tZWRvbWFpbi5jb20pIg0KICAgIH0sDQogICAgImh0dHBUaHJlYWRmaW5Eb21haW4iOg0KICAgIHsNCiAgICAgICJ0aXRsZSI6ICJUaHJlYWRmaW4gRG9tYWluIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJXaXRoIGltYWdlIGNhY2hpbmcgZW5hYmxlZCwgcmV3cml0ZSB0aGUgdGhyZWFkZmluIGlwIGFkZHJlc3MgaW4gdGhlIG0zdSB0byB1c2UgYSBkb21haW4gZm9yIEhUVFAgbW9kZS4gRG8gTk9UIGluY2x1ZGUgaHR0cCAoZXg6IHNvbWVkb21haW4uY29tKSINCiAgICB9LA0KICAgICJlbmFibGVOb25Bc2NpaSI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVuYWJsZSBOb24tQVNDSUkiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIklmIGNoZWNrZWQsIHdpbGwgYWxsb3cgc3BlY2lhbCBub24gYXNjaWkgY2hhcmFjdGVycyBpbiB0aGUgTTNVIGFuZCBFUEcuIERlZmF1bHQgaXMgZGlzYWJsZWQiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllcyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJDdXN0b21pemUgdGhlIEVQRyBDYXRlZ29yaWVzLiBUaGUgZm9ybWF0IGlzIGtleTp2YWx1ZXxrZXk6dmFsdWUsIHNvIE5ld3M6bmV3c3xTcG9ydHM6c3BvcnRzfE1vdmllczptb3ZpZXMiDQogICAgfSwNCiAgICAiZXBnQ2F0ZWdvcmllc0NvbG9ycyI6DQogICAgew0KICAgICAgInRpdGxlIjogIkVQRyBDYXRlZ29yaWVzIENvbG9ycyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQ3VzdG9taXplIHRoZSBFUEcgQ2F0ZWdvcnkgY29sb3JzLiBUaGUgZm9ybWF0IGlzIHZhbHVlOmNvbG9yfHZhbHVlOmNvbG9yLCBzbyBuZXdzOnRvbWF0b3xzcG9ydHM6eWVsbG93Z3JlZW58bW92aWVzOnJveWFsYmx1ZSINCiAgICB9LA0KICAgICJidWZmZXJUaW1lb3V0Ijogew0KICAgICAgInRpdGxlIjogIlRpbWVvdXQgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBUaHJlYWRmaW4gYnVmZmVyIHdhaXRzIHVudGlsIG5ldyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkLiBIZWxwZnVsIGZvciBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nLiBWYWx1ZSBpbiBtaWxsaXNlY29uZHMuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICIxMDAiDQogICAgfSwNCiAgICAidXNlckFnZW50Ijogew0KICAgICAgInRpdGxlIjogIlVzZXIgQWdlbnQiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIlVzZXIgQWdlbnQgZm9yIEhUVFAgcmVxdWVzdHMuIEZvciBldmVyeSBIVFRQIGNvbm5lY3Rpb24sIHRoaXMgdmFsdWUgaXMgdXNlZCBmb3IgdGhlIHVzZXIgYWdlbnQuIFNob3VsZCBvbmx5IGJlIGNoYW5nZWQgaWYgVGhyZWFkZmluIGlzIGJsb2NrZWQuIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJUaHJlYWRmaW4iDQogICAgfSwNCiAgICAiYmFja3VwUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgYXV0b21hdGljIGJhY2t1cHMiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIi9tbnQvZGF0YS9iYWNrdXAvdGhyZWFkZmluLyIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQmVmb3JlIGFueSB1cGRhdGUgb2YgdGhlIHByb3ZpZGVyIGRhdGEgYnkgdGhlIHNjaGVkdWxlLCBUaHJlYWRmaW4gY3JlYXRlcyBhIGJhY2t1cC4gVGhlIHBhdGggZm9yIHRoZSBhdXRvbWF0aWMgYmFja3VwcyBjYW4gYmUgY2hhbmdlZC4gVGhyZWFkZmluIHJlcXVpcmVzIHdyaXRlIHBlcm1pc3Npb24gZm9yIHRoaXMgZm9sZGVyLiINCiAgICB9LA0KICAgICJ0ZW1wUGF0aCI6IHsNCiAgICAgICJ0aXRsZSI6ICJMb2NhdGlvbiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcyIsDQogICAgICAicGxhY2Vob2xkZXIiOiAiL3RtcC90aHJlYWRmaW4vIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2NhdGlvbiBmb3IgdGhlIGJ1ZmZlciBmaWxlcy4iDQogICAgfSwNCiAgICAiYmFja3VwS2VlcCI6IHsNCiAgICAgICJ0aXRsZSI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgYmFja3VwcyB0byBrZWVwLiBPbGRlciBiYWNrdXBzIGFyZSBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQuIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uV0VCIjogew0KICAgICAgInRpdGxlIjogIldFQiBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSB3ZWIgaW50ZXJmYWNlIG9ubHkgcG9zc2libGUgd2l0aCBjcmVkZW50aWFscy4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25QTVMiOiB7DQogICAgICAidGl0bGUiOiAiUE1TIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJQbGV4IHJlcXVlc3RzIGFyZSBvbmx5IHBvc3NpYmxlIHdpdGggYXV0aGVudGljYXRpb24uIDxicj48Yj5XYXJuaW5nISEhPC9iPiBBZnRlciBhY3RpdmF0aW5nIHRoaXMgZnVuY3Rpb24gVGhyZWFkZmluIG11c3QgYmUgZGVsZXRlIGluIHRoZSBQTVMgRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uTTNVIjogew0KICAgICAgInRpdGxlIjogIk0zVSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiRG93bmxvYWRpbmcgdGhlIHRocmVhZGZpbi5tM3UgZmlsZSB2aWEgYW4gSFRUUCByZXF1ZXN0IGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfSwNCiAgICAiYXV0aGVudGljYXRpb25YTUwiOiB7DQogICAgICAidGl0bGUiOiAiWE1MIEF1dGhlbnRpY2F0aW9uIiwNCiAgICAgICJkZXNjcmlwdGlvbiI6ICJEb3dubG9hZGluZyB0aGUgdGhyZWFkZmluLnhtbCBmaWxlIHZpYSBhbiBIVFRQIHJlcXVlc3QgaXMgb25seSBwb3NzaWJsZSB3aXRoIGF1dGhlbnRpY2F0aW9uIg0KICAgIH0sDQogICAgImF1dGhlbnRpY2F0aW9uQVBJIjogew0KICAgICAgInRpdGxlIjogIkFQSSBBdXRoZW50aWNhdGlvbiIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiQWNjZXNzIHRvIHRoZSBBUEkgaW50ZXJmYWNlIGlzIG9ubHkgcG9zc2libGUgd2l0aCBhdXRoZW50aWNhdGlvbi4iDQogICAgfQ0KICB9LA0KICAid2l6YXJkIjogew0KICAgICJlcGdTb3VyY2UiOiB7DQogICAgICAidGl0bGUiOiAiRVBHIFNvdXJjZSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiUE1TOjxicj4tIFVzZSBFUEcgZGF0YSBmcm9tIFBsZXgsIEVtYnkgb3IgSmVsbHlmaW4gPGJyPjxicj5YRVBHOjxicj4tIFVzZSBvZiBvbmUgb3IgbW9yZSBYTUxUViBmaWxlczxicj4tIENoYW5uZWwgbWFuYWdlbWVudDxicj4tIE0zVSAvIFhNTFRWIGV4cG9ydCAoSFRUUCBsaW5rIGZvciBJUFRWIGFwcHMpIg0KICAgIH0sDQogICAgInR1bmVyIjogew0KICAgICAgInRpdGxlIjogIk51bWJlciBvZiB0dW5lcnMiLA0KICAgICAgImRlc2NyaXB0aW9uIjogIk51bWJlciBvZiBwYXJhbGxlbCBjb25uZWN0aW9ucyB0aGF0IGNhbiBiZSBlc3RhYmxpc2hlZCB0byB0aGUgcHJvdmlkZXIuPGJyPkF2YWlsYWJsZSBmb3I6IFBsZXgsIEVtYnksIEplbGx5ZmluLCBNM1UgKHdpdGggYWN0aXZlIGJ1ZmZlcikuPGJyPkFmdGVyIGEgY2hhbmdlLCBUaHJlYWRmaW4gbXVzdCBiZSBkZWxldGUgaW4gdGhlIFBsZXggLyBFbWJ5IC8gSmVsbHlmaW4gRFZSIHNldHRpbmdzIGFuZCBzZXQgdXAgYWdhaW4uIg0KICAgIH0sDQogICAgIm0zdSI6IHsNCiAgICAgICJ0aXRsZSI6ICJNM1UgUGxheWxpc3QiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkZpbGUgcGF0aCBvciBVUkwgb2YgdGhlIE0zVSIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIHBsYXlsaXN0cyINCiAgICB9LA0KICAgICJ4bWx0diI6IHsNCiAgICAgICJ0aXRsZSI6ICJYTUxUViBGaWxlIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJGaWxlIHBhdGggb3IgVVJMIG9mIHRoZSBYTUxUViIsDQogICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgb3IgcmVtb3RlIFhNTFRWIGZpbGUiDQogICAgfQ0KICB9LA0KICAibG9naW4iOiB7DQogICAgImZhaWxlZCI6ICJVc2VyIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCIsDQogICAgImhlYWRsaW5lIjogIkxvZ2luIiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCINCiAgICB9DQogIH0sDQogICJhY2NvdW50Ijogew0KICAgICJmYWlsZWQiOiAiUGFzc3dvcmQgZG9lcyBub3QgbWF0Y2giLA0KICAgICJoZWFkbGluZSI6ICJDcmVhdGUgdXNlciBhY2NvdW50IiwNCiAgICAidXNlcm5hbWUiOiB7DQogICAgICAidGl0bGUiOiAiVXNlcm5hbWUiLA0KICAgICAgInBsYWNlaG9sZGVyIjogIlVzZXJuYW1lIg0KICAgIH0sDQogICAgInBhc3N3b3JkIjogew0KICAgICAgInRpdGxlIjogIlBhc3N3b3JkIiwNCiAgICAgICJwbGFjZWhvbGRlciI6ICJQYXNzd29yZCINCiAgICB9LA0KICAgICJjb25maXJtIjogew0KICAgICAgInRpdGxlIjogIkNvbmZpcm0iLA0KICAgICAgInBsYWNlaG9sZGVyIjogIkNvbmZpcm0iDQogICAgfQ0KICB9DQp9"
+ webUI["html/img/settings.png"] = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAsSwAALEsBpT2WqQAABCRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjI4ODwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+Mjg4PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjUwPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wOC0xMFQxODowODo4OTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjM8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Ckxt87EAAAS7SURBVGgFzZpdiFVVGIbn5N+IMgVhaRLqWI7mQIJoIVRgOhQZNDAhWcbcVuPV3BRE6I14440iQQSaN0p6kz8zI0k5inUhZSSaYOVYODMo5eiMOOPf+LzH2cPMPmvttdbe53jOBy9rr2+938/ae51vr733qaoqgQwPD68B/wDJfXAP3AE94JMShCy+SxJ9CvSDJFlU7MiPFdsh/hrBdIffBsd48HApJjLPI4tnPThBlFJMZI5HBuWZCIt9AmgEzeAJR6JzHeMadnKI8wbYCz4Fkz18JlNwMgf8BCL5j4O3bVaMdUfEhPZqgv1U7HbEbDvoT7HZOPUYNwAlHheV09a4A3RTgMqtj9QY7JdgeM5i3I4+fDIYrQeq/UnyNYOTlBDtS+BwEjk2doz+KyO2OY5bwVCME+/qylTHT4C1D3k+uB33Yul3ov/eMuajlu1RH+II5wtT4hNNSnQ6U/kzbRkfq351bCfF8apAm7kmvq38njWRK0S305SHcSK5XO4U5O9MBmXWbSe3E6YccialdKzH2TTnQEF10XgZ5DdivsxEhkyxjVdERAwu03xmMiqD7hYx19km4cyHq6KyeHKkWpSz+ciVrHVpRYZk/wLHp0H2bULkNKzt4Eq86TKxLq3IECf6nXwV9QPbAfjHQSfoD7SN6L63gYhvbrkiTwKf/dPYpbdPVxKMnigdg0VAG8FQye8AzBl6aIk2A+wPiNoHd63LNZx3wbUAvz/CfTzJb/43AmkGpLfAi0DPE/NALQgtve+xFPdi5xRiNkHa5ySOJ/TR7RrBJdqL4AAxL+p+8ToYAFklNCnF3pM1KPba2L6v8vons5oPsko9ZyZoa0PsOoKezxoY+y5N5DYHWSvDTXzUMJH7IUkRW0tbyyV0CcfDDKmqDMe1KfqnQyehGNgo9q8p4hWYFGsiBY4fsSK/BRkkaPgj5PhMy720BnVFesfnlKo3Das0bw8XYJf196GEuzWRLSDoRypLg2w06FyqTS6Cx7iK1eeqGqrnugmuBgvB8+A5UAuqQYiU+oZ4h2T+BV3gAlDp/pai0U1rFpVGMAv8AHzFd4vShMOQLcoB+DNB/sSbM3ZoMV4BQsW0adSJSbNp1Hu1mY40/YZxpPdJaUSfFzrBMXAjjQNsdvll6cHCWVvKJIphdhcny11pqmolCk5aIDif0BKdZBucgPlO8kh/r8O4HtwClSCbk86HtQqQuUrvKVCf5OARjt0lll4H/WKKmbS0tmJQKZNQ7nq9+w0n2LhTN04E8jKMPpZ1hcli8tGTZYEYJwJrZQGzchTGz3a2ifwdkHc73LYAfpx6DcWXQK1LeiDsdpFGx7UOwUGQJKpmGyIjjvWh50iSQWzsZ/ofgvx+jnYp+B/YpJcB7QXDBKPJ4JDF6+/oCwoBuhoL36R+Jp4RJH16u2IgaxJpHhMehsBY3wTjV2YbOuuumLHrwCW6msbSj74O/DHGgV4Ohl8Jw1nSMmsB+tL6Wnw83odzBrhEr2GtgvFE8A74ADxtJZZygMC25cjQqBwqdg62qpUlziUP45Cq6OGuqqoUE/FJ8i+v7MpJYvEsHl1A5gNty2vLmaN3bBLdAvqB3svqXxLRvyEuc9zs7SiA+ACpw05pJx8SoAAAAABJRU5ErkJggg=="
}
diff --git a/src/webserver.go b/src/webserver.go
index fac53e8..f1022bb 100644
--- a/src/webserver.go
+++ b/src/webserver.go
@@ -27,7 +27,7 @@ func StartWebserver() (err error) {
http.HandleFunc("/stream/", Stream)
http.HandleFunc("/xmltv/", Threadfin)
http.HandleFunc("/m3u/", Threadfin)
- http.HandleFunc("/data/", WS)
+ http.HandleFunc("/ws/", WS)
http.HandleFunc("/web/", Web)
http.HandleFunc("/download/", Download)
http.HandleFunc("/api/", API)
@@ -55,22 +55,37 @@ func StartWebserver() (err error) {
if customIps != nil {
showHighlight("Webserver is restricted to listen to this address(es):")
for _, ip := range customIps {
- showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol.WEB, ip, Settings.Port))
+ showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol, ip, Settings.Port))
}
} else {
for _, ip := range System.IPAddressesV4 {
- showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol.WEB, ip, Settings.Port))
+ showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol, ip, Settings.Port))
}
for _, ip := range System.IPAddressesV6 {
- showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol.WEB, ip, Settings.Port))
+ showHighlight(fmt.Sprintf("Web Intreface:%s://%s:%s/web/", System.ServerProtocol, ip, Settings.Port))
}
}
- if err = http.ListenAndServe(":"+port, nil); err != nil {
- ShowError(err, 1001)
- return
+
+
+
+ if Settings.UseHttps {
+ go func () {
+ if err = http.ListenAndServeTLS(":" + port, System.Folder.Config + "server.crt", System.Folder.Config + "server.key", nil); err != nil {
+ ShowError(err, 1001)
+ return
+ }
+ } ()
+ } else {
+ go func () {
+ if err = http.ListenAndServe(":" + port, nil); err != nil {
+ ShowError(err, 1001)
+ return
+ }
+ }()
}
- return
+
+ select {}
}
func checkForRestriction(w http.ResponseWriter, r *http.Request) error{
@@ -101,12 +116,6 @@ func Index(w http.ResponseWriter, r *http.Request) {
return
}
- if Settings.HttpThreadfinDomain != "" {
- setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port))
- } else {
- setGlobalDomain(r.Host)
- }
-
debug = fmt.Sprintf("Web Server Request:Path: %s", path)
showDebug(debug, 2)
@@ -205,15 +214,22 @@ func Stream(w http.ResponseWriter, r *http.Request) {
return
}
- if Settings.ForceHttps {
+ if Settings.ForceHttpsToUpstream {
u, err := url.Parse(streamInfo.URL)
if err == nil {
- u.Scheme = "https"
+ var streamURL = "https"
host_split := strings.Split(u.Host, ":")
if len(host_split) > 0 {
- u.Host = host_split[0]
+ streamURL += "://" + host_split[0]
+ }
+ if len(host_split) > 1 {
+ streamURL += ":" + host_split[1]
+ }
+ if u.RawQuery != ""{
+ streamInfo.URL = fmt.Sprintf("%s%s?%s", streamURL, u.Path, u.RawQuery)
+ } else {
+ streamInfo.URL = streamURL + u.Path
}
- streamInfo.URL = fmt.Sprintf("https://%s:%d%s", u.Host, Settings.HttpsPort, u.Path)
}
}
@@ -314,12 +330,6 @@ func Threadfin(w http.ResponseWriter, r *http.Request) {
return
}
- if Settings.HttpThreadfinDomain != "" {
- setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port))
- } else {
- setGlobalDomain(r.Host)
- }
-
// XMLTV Datei
if strings.Contains(path, "xmltv/") {
@@ -436,6 +446,11 @@ func DataImages(w http.ResponseWriter, r *http.Request) {
w.Write(content)
}
+var upgrader = websocket.Upgrader{
+ ReadBufferSize: 1024,
+ WriteBufferSize: 1024,
+}
+
// WS : Web Sockets /ws/
func WS(w http.ResponseWriter, r *http.Request) {
@@ -452,32 +467,27 @@ func WS(w http.ResponseWriter, r *http.Request) {
var newToken string
- /*
- if r.Header.Get("Origin") != "http://"+r.Host {
- httpStatusError(w, r, 403)
- return
- }
- */
-
- conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024)
+ // Upgrade connection to websocket connection
+ conn, err := upgrader.Upgrade(w, r, w.Header())
if err != nil {
ShowError(err, 0)
http.Error(w, "Could not open websocket connection", http.StatusBadRequest)
return
}
- if Settings.HttpThreadfinDomain != "" {
- setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port))
- } else {
- setGlobalDomain(r.Host)
- }
-
for {
- err = conn.ReadJSON(&request)
+ _, msgBytes, err := conn.ReadMessage()
+ if err != nil {
+ ShowError(err, 11103)
+ break
+ }
+
+ err = json.Unmarshal(msgBytes, &request)
if err != nil {
- return
+ ShowError(err, 1120)
+ break
}
if !System.ConfigurationWizard {
@@ -537,6 +547,7 @@ func WS(w http.ResponseWriter, r *http.Request) {
// Daten schreiben
case "saveSettings":
+ showInfo("WEB:Saving settings")
var authenticationUpdate = Settings.AuthenticationWEB
var previousStoreBufferInRAM = Settings.StoreBufferInRAM
response.Settings, err = updateServerSettings(request)
@@ -547,7 +558,7 @@ func WS(w http.ResponseWriter, r *http.Request) {
if Settings.AuthenticationWEB && !authenticationUpdate {
response.Reload = true
}
-
+
if Settings.StoreBufferInRAM != previousStoreBufferInRAM {
initBufferVFS(Settings.StoreBufferInRAM)
}
@@ -628,7 +639,7 @@ func WS(w http.ResponseWriter, r *http.Request) {
file, errNew := ThreadfinBackup()
err = errNew
if err == nil {
- response.OpenLink = fmt.Sprintf("%s://%s/download/%s", System.ServerProtocol.WEB, System.Domain, file)
+ response.OpenLink = fmt.Sprintf("%s://%s/download/%s", System.ServerProtocol, System.Domain, file)
}
case "ThreadfinRestore":
@@ -741,12 +752,6 @@ func Web(w http.ResponseWriter, r *http.Request) {
return
}
- if Settings.HttpThreadfinDomain != "" {
- setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port))
- } else {
- setGlobalDomain(r.Host)
- }
-
if System.Dev {
lang, err = loadJSONFileToMap(fmt.Sprintf("html/lang/%s.json", Settings.Language))
@@ -967,11 +972,6 @@ func API(w http.ResponseWriter, r *http.Request) {
}
*/
- if Settings.HttpThreadfinDomain != "" {
- setGlobalDomain(fmt.Sprintf("%s:%s", Settings.HttpThreadfinDomain, Settings.Port))
- } else {
- setGlobalDomain(r.Host)
- }
var request APIRequestStruct
var response APIResponseStruct
@@ -1063,8 +1063,8 @@ func API(w http.ResponseWriter, r *http.Request) {
response.StreamsXepg = int64(Data.XEPG.XEPGCount)
response.EpgSource = Settings.EpgSource
response.URLDvr = System.Domain
- response.URLM3U = System.ServerProtocol.M3U + "://" + System.Domain + "/m3u/threadfin.m3u"
- response.URLXepg = System.ServerProtocol.XML + "://" + System.Domain + "/xmltv/threadfin.xml"
+ response.URLM3U = System.ServerProtocol + "://" + System.Domain + "/m3u/threadfin.m3u"
+ response.URLXepg = System.ServerProtocol + "://" + System.Domain + "/xmltv/threadfin.xml"
case "update.m3u":
err = getProviderData("m3u", "")
diff --git a/src/xepg.go b/src/xepg.go
index 2783fc7..3ce6c4a 100644
--- a/src/xepg.go
+++ b/src/xepg.go
@@ -7,7 +7,6 @@ import (
"encoding/xml"
"errors"
"fmt"
- "io/ioutil"
"log"
"path"
"regexp"
@@ -51,7 +50,7 @@ func buildXEPG(background bool) {
var err error
- Data.Cache.Images, err = imgcache.New(System.Folder.ImagesCache, fmt.Sprintf("%s://%s/images/", System.ServerProtocol.WEB, System.Domain), Settings.CacheImages)
+ Data.Cache.Images = imgcache.NewImageCache(Settings.CacheImages, System.Folder.ImagesCache, System.BaseURL)
if err != nil {
ShowError(err, 0)
}
@@ -64,6 +63,7 @@ func buildXEPG(background bool) {
go func() {
+ Data.Cache.Images.DeleteCache()
createXEPGMapping()
createXEPGDatabase()
mapping()
@@ -78,10 +78,12 @@ func buildXEPG(background bool) {
go func() {
System.ImageCachingInProgress = 1
- showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", len(Data.Cache.Images.Queue)))
+ Data.Cache.Images.WaitForDownloads()
+ showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", Data.Cache.Images.GetNumCachedImages()))
+
+ //Data.Cache.Images.Image.Caching()
+ //Data.Cache.Images.Image.Remove()
- Data.Cache.Images.Image.Caching()
- Data.Cache.Images.Image.Remove()
showInfo("Image Caching:Done")
createXMLTVFile()
@@ -106,6 +108,7 @@ func buildXEPG(background bool) {
case false:
+ Data.Cache.Images.DeleteCache()
createXEPGMapping()
createXEPGDatabase()
mapping()
@@ -120,10 +123,11 @@ func buildXEPG(background bool) {
go func() {
System.ImageCachingInProgress = 1
- showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", len(Data.Cache.Images.Queue)))
+ Data.Cache.Images.WaitForDownloads()
+ showInfo(fmt.Sprintf("Image Caching:Images are cached (%d)", Data.Cache.Images.GetNumCachedImages()))
- Data.Cache.Images.Image.Caching()
- Data.Cache.Images.Image.Remove()
+ //Data.Cache.Images.Image.Caching()
+ //Data.Cache.Images.Image.Remove()
showInfo("Image Caching:Done")
createXMLTVFile()
@@ -249,7 +253,7 @@ func createXEPGMapping() {
// XML Parsen (Provider Datei)
if err == nil {
- var imgc = Data.Cache.Images
+ //var imgc = Data.Cache.Images
// Daten aus der XML Datei in eine temporäre Map schreiben
var xmltvMap = make(map[string]interface{})
@@ -258,7 +262,7 @@ func createXEPGMapping() {
channel["id"] = c.ID
channel["display-name"] = friendlyDisplayName(*c)
- channel["icon"] = imgc.Image.GetURL(c.Icon.Src, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ channel["icon"] = Data.Cache.Images.GetImageURL(c.Icon.Src)
channel["active"] = c.Active
xmltvMap[c.ID] = channel
@@ -492,8 +496,8 @@ func createXEPGDatabase() (err error) {
// Kanallogo aktualisieren. Wird bei vorhandenem Logo in der XMLTV Datei wieder überschrieben
if xepgChannel.XUpdateChannelIcon {
- var imgc = Data.Cache.Images
- xepgChannel.TvgLogo = imgc.Image.GetURL(m3uChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ //var imgc = Data.Cache.Images
+ xepgChannel.TvgLogo = Data.Cache.Images.GetImageURL(m3uChannel.TvgLogo)
}
Data.XEPG.Channels[currentXEPGID] = xepgChannel
@@ -716,8 +720,8 @@ func mapping() (err error) {
if logo, ok := channel["icon"].(string); ok {
if xepgChannel.XUpdateChannelIcon && len(logo) > 0 {
- var imgc = Data.Cache.Images
- xepgChannel.TvgLogo = imgc.Image.GetURL(logo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ //var imgc = Data.Cache.Images
+ xepgChannel.TvgLogo = Data.Cache.Images.GetImageURL(logo)
}
}
@@ -771,24 +775,6 @@ func createXMLTVFile() (err error) {
// Image Cache
// 4edd81ab7c368208cc6448b615051b37.jpg
- var imgc = Data.Cache.Images
-
- Data.Cache.ImagesFiles = []string{}
- Data.Cache.ImagesURLS = []string{}
- Data.Cache.ImagesCache = []string{}
-
- files, err := ioutil.ReadDir(System.Folder.ImagesCache)
- if err == nil {
-
- for _, file := range files {
-
- if indexOfString(file.Name(), Data.Cache.ImagesCache) == -1 {
- Data.Cache.ImagesCache = append(Data.Cache.ImagesCache, file.Name())
- }
-
- }
-
- }
if len(Data.XMLTV.Files) == 0 && len(Data.Streams.Active) == 0 {
Data.XEPG.Channels = make(map[string]interface{})
@@ -825,7 +811,7 @@ func createXMLTVFile() (err error) {
// Kanäle
var channel Channel
channel.ID = xepgChannel.XChannelID
- channel.Icon = Icon{Src: imgc.Image.GetURL(xepgChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)}
+ channel.Icon = Icon{Src: Data.Cache.Images.GetImageURL(xepgChannel.TvgLogo)}
channel.DisplayName = append(channel.DisplayName, DisplayName{Value: xepgChannel.XName})
channel.Active = xepgChannel.XActive
channel.Live = true
@@ -924,7 +910,7 @@ func getProgramData(xepgChannel XEPGChannelStruct) (xepgXML XMLTV, err error) {
program.Country = xmltvProgram.Country
// Program icon (Poster / Cover)
- getPoster(program, xmltvProgram, xepgChannel, Settings.ForceHttps)
+ getPoster(program, xmltvProgram, xepgChannel)
// Language (Sprache)
program.Language = xmltvProgram.Language
@@ -1030,7 +1016,7 @@ func createDummyProgram(xepgChannel XEPGChannelStruct) (dummyXMLTV XMLTV) {
return
}
- var imgc = Data.Cache.Images
+ //var imgc = Data.Cache.Images
var currentTime = time.Now()
var dateArray = strings.Fields(currentTime.String())
var offset = " " + dateArray[2]
@@ -1073,7 +1059,7 @@ func createDummyProgram(xepgChannel XEPGChannelStruct) (dummyXMLTV XMLTV) {
}
if Settings.XepgReplaceMissingImages {
- poster.Src = imgc.Image.GetURL(xepgChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ poster.Src = Data.Cache.Images.GetImageURL(xepgChannel.TvgLogo)
epg.Poster = append(epg.Poster, poster)
}
@@ -1116,12 +1102,12 @@ func getCategory(program *Program, xmltvProgram *Program, xepgChannel XEPGChanne
}
// Programm Poster Cover aus der XMLTV Datei laden
-func getPoster(program *Program, xmltvProgram *Program, xepgChannel XEPGChannelStruct, forceHttps bool) {
+func getPoster(program *Program, xmltvProgram *Program, xepgChannel XEPGChannelStruct) {
- var imgc = Data.Cache.Images
+ //var imgc = Data.Cache.Images
for _, poster := range xmltvProgram.Poster {
- poster.Src = imgc.Image.GetURL(poster.Src, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ poster.Src = Data.Cache.Images.GetImageURL(poster.Src)
program.Poster = append(program.Poster, poster)
}
@@ -1129,7 +1115,7 @@ func getPoster(program *Program, xmltvProgram *Program, xepgChannel XEPGChannelS
if len(xmltvProgram.Poster) == 0 {
var poster Poster
- poster.Src = imgc.Image.GetURL(xepgChannel.TvgLogo, Settings.HttpThreadfinDomain, Settings.Port, Settings.ForceHttps, Settings.HttpsPort, Settings.HttpsThreadfinDomain)
+ poster.Src = Data.Cache.Images.GetImageURL(xepgChannel.TvgLogo)
program.Poster = append(program.Poster, poster)
}
@@ -1225,9 +1211,9 @@ func createM3UFile() {
_, err := buildM3U([]string{})
if err != nil {
ShowError(err, 000)
+ } else {
+ showInfo("XEPG:Created M3U file")
}
-
- saveMapToJSONFile(System.File.URLS, Data.Cache.StreamingURLS)
}
// XEPG Datenbank bereinigen
diff --git a/threadfin.go b/threadfin.go
index 141b72c..45ec58e 100644
--- a/threadfin.go
+++ b/threadfin.go
@@ -53,7 +53,8 @@ var samplePath = fmt.Sprintf("%spath%sto%sthreadfin%s", string(os.PathSeparator)
var sampleRestore = fmt.Sprintf("%spath%sto%sfile%s", string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator), string(os.PathSeparator))
var configFolder = flag.String("config", "", ": Config Folder ["+samplePath+"] (default: "+homeDirectory+")")
-var port = flag.String("port", "", ": Server port [34400] (default: 34400)")
+var port = flag.Int("port", 34400, ": Server port")
+var useHttps = flag.Bool("useHttps", false , ": Use Https Webserver [place server.crt and server.key in config folder]")
var restore = flag.String("restore", "", ": Restore from backup ["+sampleRestore+"threadfin_backup.zip]")
var gitBranch = flag.String("branch", "", ": Git Branch [main|beta] (default: main)")
@@ -141,10 +142,13 @@ func main() {
}
// Webserver Port
- if len(*port) > 0 {
- system.Flag.Port = *port
+ if *port != 0 {
+ system.Flag.Port = fmt.Sprintf("%d", *port)
}
+ // Https Webserver
+ system.Flag.UseHttps = *useHttps
+
// Branch
system.Flag.Branch = *gitBranch
if len(system.Flag.Branch) > 0 {
diff --git a/ts/base_ts.ts b/ts/base_ts.ts
index a8c8c5c..25d892b 100644
--- a/ts/base_ts.ts
+++ b/ts/base_ts.ts
@@ -46,8 +46,8 @@ menuItems.push(new MainMenuItem("logout", "{{.mainMenu.item.logout}}", "logout.p
// Kategorien für die Einstellungen
var settingsCategory = new Array()
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.general}}", "ThreadfinAutoUpdate,ssdp,tuner,epgSource,epgCategories,epgCategoriesColors,dummy,dummyChannel,ignoreFilters,api"))
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii"))
-settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "listeningIp,httpThreadfinDomain,forceHttps,httpsPort,httpsThreadfinDomain"))
+settingsCategory.push(new SettingsCategoryItem("{{.settings.category.files}}", "update,files.update,temp.path,cache.images,omitPorts,xepg.replace.missing.images,xepg.replace.channel.title,enableNonAscii"))
+settingsCategory.push(new SettingsCategoryItem("{{.settings.category.network}}", "listeningIp,threadfinDomain,useHttps,forceClientHttps,forceHttps"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.streaming}}", "buffer,udpxy,buffer.size.kb,storeBufferInRAM,buffer.timeout,user.agent,ffmpeg.path,ffmpeg.options,vlc.path,vlc.options"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.backup}}", "backup.path,backup.keep"))
settingsCategory.push(new SettingsCategoryItem("{{.settings.category.authentication}}", "authentication.web,authentication.pms,authentication.m3u,authentication.xml,authentication.api"))
diff --git a/ts/network_ts.ts b/ts/network_ts.ts
index 4b0730d..facf2b0 100644
--- a/ts/network_ts.ts
+++ b/ts/network_ts.ts
@@ -8,9 +8,9 @@ class Server {
request(data: Object): any {
- if (SERVER_CONNECTION == true) {
- return
- }
+ //if (SERVER_CONNECTION == true) {
+ // return
+ //}
SERVER_CONNECTION = true
@@ -29,7 +29,7 @@ class Server {
break
}
- var url = this.protocol + window.location.hostname + ":" + window.location.port + "/data/" + "?Token=" + getCookie("Token")
+ var url = this.protocol + window.location.hostname + ":" + window.location.port + "/ws/" + "?Token=" + getCookie("Token")
data["cmd"] = this.cmd
var ws = new WebSocket(url)
diff --git a/ts/settings_ts.ts b/ts/settings_ts.ts
index 0f65434..be19fd8 100644
--- a/ts/settings_ts.ts
+++ b/ts/settings_ts.ts
@@ -145,19 +145,19 @@ class SettingsCategory {
setting.appendChild(tdRight)
break
- case "listeningIp":
- var tdLeft = document.createElement("TD")
- tdLeft.innerHTML = "{{.settings.listeningIp.title}}" + ":"
-
- var tdRight = document.createElement("TD")
- var input = content.createInput("text", "listeningIp", data)
- input.setAttribute("placeholder", "{{.settings.listeningIp.placeholder}}")
- input.setAttribute("onchange", "javascript: this.className = 'changed'")
- tdRight.appendChild(input)
-
- setting.appendChild(tdLeft)
- setting.appendChild(tdRight)
- break
+ case "listeningIp":
+ var tdLeft = document.createElement("TD")
+ tdLeft.innerHTML = "{{.settings.listeningIp.title}}" + ":"
+
+ var tdRight = document.createElement("TD")
+ var input = content.createInput("text", "listeningIp", data)
+ input.setAttribute("placeholder", "{{.settings.listeningIp.placeholder}}")
+ input.setAttribute("onchange", "javascript: this.className = 'changed'")
+ tdRight.appendChild(input)
+
+ setting.appendChild(tdLeft)
+ setting.appendChild(tdRight)
+ break
// Checkboxen
case "authentication.web":
@@ -300,6 +300,20 @@ class SettingsCategory {
setting.appendChild(tdRight)
break
+ case "omitPorts":
+ var tdLeft = document.createElement("TD")
+ tdLeft.innerHTML = "{{.settings.omitPorts.title}}" + ":"
+
+ var tdRight = document.createElement("TD")
+ var input = content.createCheckbox(settingsKey)
+ input.checked = data
+ input.setAttribute("onchange", "javascript: this.className = 'changed'")
+ tdRight.appendChild(input)
+
+ setting.appendChild(tdLeft)
+ setting.appendChild(tdRight)
+ break
+
case "forceHttps":
var tdLeft = document.createElement("TD")
tdLeft.innerHTML = "{{.settings.forceHttps.title}}" + ":"
@@ -314,44 +328,58 @@ class SettingsCategory {
setting.appendChild(tdRight)
break
- case "httpsPort":
- var tdLeft = document.createElement("TD")
- tdLeft.innerHTML = "{{.settings.httpsPort.title}}" + ":"
-
- var tdRight = document.createElement("TD")
- var input = content.createInput("text", "httpsPort", data.toString())
- input.setAttribute("placeholder", "{{.settings.httpsPort.placeholder}}")
- input.setAttribute("onchange", "javascript: this.className = 'changed'")
- tdRight.appendChild(input)
-
- setting.appendChild(tdLeft)
- setting.appendChild(tdRight)
- break
+ case "useHttps":
+ var tdLeft = document.createElement("TD")
+ tdLeft.innerHTML = "{{.settings.useHttps.title}}" + ":"
+
+ var tdRight = document.createElement("TD")
+ var input = content.createCheckbox(settingsKey)
+ input.checked = data
+ input.setAttribute("onchange", "javascript: this.className = 'changed'")
+ tdRight.appendChild(input)
- case "httpsThreadfinDomain":
+ setting.appendChild(tdLeft)
+ setting.appendChild(tdRight)
+ break
+
+ case "forceClientHttps":
+ var tdLeft = document.createElement("TD")
+ tdLeft.innerHTML = "{{.settings.forceClientHttps.title}}" + ":"
+
+ var tdRight = document.createElement("TD")
+ var input = content.createCheckbox(settingsKey)
+ input.checked = data
+ input.setAttribute("onchange", "javascript: this.className = 'changed'")
+ tdRight.appendChild(input)
+
+ setting.appendChild(tdLeft)
+ setting.appendChild(tdRight)
+ break
+
+ case "threadfinDomain":
var tdLeft = document.createElement("TD")
- tdLeft.innerHTML = "{{.settings.httpsThreadfinDomain.title}}" + ":"
+ tdLeft.innerHTML = "{{.settings.threadfinDomain.title}}" + ":"
var tdRight = document.createElement("TD")
- var input = content.createInput("text", "httpsThreadfinDomain", data.toString())
- input.setAttribute("placeholder", "{{.settings.httpsThreadfinDomain.placeholder}}")
+ var input = content.createInput("text", "threadfinDomain", data.toString())
+ input.setAttribute("placeholder", "{{.settings.threadfinDomain.placeholder}}")
input.setAttribute("onchange", "javascript: this.className = 'changed'")
tdRight.appendChild(input)
setting.appendChild(tdLeft)
setting.appendChild(tdRight)
break
-
- case "httpThreadfinDomain":
+
+ case "domainUseHttps":
var tdLeft = document.createElement("TD")
- tdLeft.innerHTML = "{{.settings.httpThreadfinDomain.title}}" + ":"
+ tdLeft.innerHTML = "{{.settings.domainUseHttps.title}}" + ":"
var tdRight = document.createElement("TD")
- var input = content.createInput("text", "httpThreadfinDomain", data.toString())
- input.setAttribute("placeholder", "{{.settings.httpThreadfinDomain.placeholder}}")
+ var input = content.createCheckbox(settingsKey)
+ input.checked = data
input.setAttribute("onchange", "javascript: this.className = 'changed'")
tdRight.appendChild(input)
-
+
setting.appendChild(tdLeft)
setting.appendChild(tdRight)
break
@@ -652,20 +680,24 @@ class SettingsCategory {
text = "{{.settings.storeBufferInRAM.description}}"
break
+ case "omitPorts":
+ text = "{{.settings.omitPorts.description}}"
+ break
+
case "forceHttps":
text = "{{.settings.forceHttps.description}}"
break
- case "httpsPort":
- text = "{{.settings.httpsPort.description}}"
+ case "useHttps":
+ text = "{{.settings.useHttps.description}}"
break
- case "httpsThreadfinDomain":
- text = "{{.settings.httpsThreadfinDomain.description}}"
- break
+ case "forceClientHttps":
+ text = "{{.settings.forceClientHttps.description}}"
+ break
- case "httpThreadfinDomain":
- text = "{{.settings.httpThreadfinDomain.description}}"
+ case "threadfinDomain":
+ text = "{{.settings.threadfinDomain.description}}"
break
case "enableNonAscii":
@@ -865,12 +897,11 @@ function saveSettings() {
case "buffer.timeout":
value = parseFloat(value)
-
}
newSettings[name] = value
break
- }
+ }
break